def solve(A, B, C):
cache = {}
def f(x):
if 100 in x:
return 0
if x in cache:
return cache[x]
a, b, c = x
ret = 1
if a:
y = tuple(sorted((a + 1, b, c)))
ret += f(y) * a / (a + b + c)
if b:
y = tuple(sorted((a, b + 1, c)))
ret += f(y) * b / (a + b + c)
if c:
y = tuple(sorted((a, b, c + 1)))
ret += f(y) * c / (a + b + c)
cache[x] = ret
return ret
return f((A, B, C))
def solve(N, T, AS):
from bisect import bisect_right
S1 = sum_for_all_subset_grey(AS[:N//2])
S2 = sum_for_all_subset_grey(AS[N // 2:])
S2.sort()
ret = 0
for x in S1:
if x > T:
continue
i = bisect_right(S2, T - x)
ret = max(ret, x + S2[i - 1])
return ret