import time import itertools import collections from functools import reduce from functools import wraps from collections import defaultdict # import pdb; pdb.set_trace() from operator import add def timefn(fn): @wraps(fn) def measure_time(*args, **kwargs): t1 = time.time() res = fn(*args, *kwargs) t2 = time.time() print('@timefn:' + fn.__name__ + ' took ' + str(t2-t1) + ' seconds.') return res return measure_time #def fn(*args, **kwargs): #@timefn #@profile def fn(): #m, n = (int(i) for i in input().split()) m, n = (i for i in input().split()) m, n = int(m), int(n) #a = [int(input()) for _ in range(n)] a = [input() for _ in range(m)] # m, n, a = 4, 4, [1, 2, 3, 5] a = map(int, a) max_val = 0 ans_lst = () for i, _ in enumerate(a, 1): for perm in itertools.permutations(a, r=i): enum = tuple(itertools.chain(perm)) enum = reduce(lambda x, y: x + y if n >= x + y else 0, enum) if enum > max_val and n >= enum: max_val = enum print('{0}'.format(max_val)) if __name__ == "__main__": fn()