(knapsack= ( things = (map.9.150) (compass.13.35) (water.153.200) (sandwich.50.160) (glucose.15.60) (tin.68.45) (banana.27.60) (apple.39.40) (cheese.23.30) (beer.52.10) ("suntan cream".11.70) (camera.32.30) (T-shirt.24.15) (trousers.48.10) (umbrella.73.40) ("waterproof trousers".42.70) ("waterproof overclothes".43.75) (note-case.22.80) (sunglasses.7.20) (towel.18.12) (socks.4.50) (book.30.10) ) & 0:?maxvalue & :?sack & ( add = cumwght cumvalue cumsack name wght val tings n ncumwght ncumvalue . !arg : (?cumwght.?cumvalue.?cumsack.(?name.?wght.?val) ?tings) & -1:?n & whl ' ( 1+!n:~>1:?n & !cumwght+!n*!wght:~>400:?ncumwght & !cumvalue+!n*!val:?ncumvalue & ( !tings: & ( !ncumvalue:>!maxvalue:?maxvalue & !cumsack (!n:0&|!name) : ?sack | ) | add $ ( !ncumwght . !ncumvalue . !cumsack (!n:0&|!name) . !tings ) ) ) ) & add$(0.0..!things) & out$(!maxvalue.!sack)); !knapsack;