import time import itertools import collections from functools import reduce from functools import wraps from collections import defaultdict # import pdb; pdb.set_trace() 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 = map(int, input().split()) a = tuple(int(input()) for _ in [0] * m) # 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))) weight = 0 for i in range(1, m + 1): com = itertools.combinations(a, i) for perm in com: w = sum(perm) if w <= n: weight = max(w, weight) print('{0}'.format(weight)) if __name__ == "__main__": fn()