白俊2798号です.


#백준2798번

n,m=map(int,input().split())
lst=[]
for i in input().split():
    lst.append(int(i))
#입력받은 n의 크기에 상관없이 더 큰 크기의 리스트를 만들수 있음

front=0
mid=1
back=2
lst2=[]

while(back<=n-1):
    while(mid<=back-1):
        while(front<=mid-1):
            lst2.append(lst[front]+lst[mid]+lst[back])
            front=front+1
        front=0
        mid=mid+1
    mid=1
    back=back+1

lst2.sort()
maxValue=lst2[0]
for i in range(1,len(lst2)):
    if lst2[i]>m: break
    if lst2[i]>maxValue:
        maxValue=lst2[i]
print(maxValue)
#백준2798번 다른풀이

n,m=map(int,input().split())
lst=list(map(int,input().strip().split()))[:n]#입력받은 n의 크기 만큼만 리스트를 만듬

#--------------------이 밑으로는 위와 동일한 코드
front=0
mid=1
back=2
lst2=[]

while(back<=n-1):
    while(mid<=back-1):
        while(front<=mid-1):
            lst2.append(lst[front]+lst[mid]+lst[back])
            front=front+1
        front=0
        mid=mid+1
    mid=1
    back=back+1

lst2.sort()
maxValue=lst2[0]
for i in range(1,len(lst2)):
    if lst2[i]>m: break
    if lst2[i]>maxValue:
        maxValue=lst2[i]
print(maxValue)
#백준2798번 다른풀이2(다른사람풀이)
def P(n,m,c):
	t=set()
	for i in range(n-2):
		for o in range(i+1,n-1):
			for p in range(o+1,n):
				s=c[i]+c[o]+c[p]
				if s<=m:
					t.add(s)
					break

	return max([*t])
print(P(*map(int,input().split()),list(sorted(map(int,input().split()))[::-1])))