import lib data = open(0).read().strip() part_1 = True def maximize(tspr, score, ks): if ks == [] or tspr == 0: r = 1 for s in score[:-1]: if s < 0: return 0 r *= s if part_1: return r elif score[-1] == 500: return r else: return 0 m = 0 for tsp in range(tspr + 1): dscore = [v * tsp for v in ks[0]] nscore = list(map(sum, zip(score, dscore))) nm = maximize(tspr - tsp, nscore, ks[1:]) m = max(m, nm) return m ks = [] for line in data.splitlines(): k = lib.str_to_ints(line) ks.append(k) score = [0 for _ in range(len(ks[0]))] print(maximize(100, score, ks))