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()) # a = [int(input()) for _ in range(n)] m, n = (i for i in input().split()) m, n = int(m), int(n) a = [input() for _ in range(m)] a = list(map(int, a)) #m, n, a = 4, 4, [1, 2, 3, 5] #m, n, a = 8, 341274, [2999, 92754, 57910, 35884, 75405, 30284, 12530, 392345] #print('m:{0} n:{1} a:{2}'.format(type(m), type(n), type(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)) #print(enum) # import pdb; pdb.set_trace() 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(max_val) print('{0}'.format(max_val)) if __name__ == "__main__": fn()