## solution  

첫 줄에숫자 N, M 이 주어진다. N은 카드의 수이며 M은 3장을 뽑았을때 넘으면 안되는 수.  

그 밑에는 N개의 카드에 써져 있는 숫자가 주어질 때, M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 입력하기


## CODE  


```python

from itertools import combinations


N,M = map(int,input().split())

l = list(map(int,input().split()))

for idx in range(len(l)):

    if l[idx] >= M:

        l.remove(l[idx])


idx_case_list = []

for tmp in combinations(range(len(l)),3):

    idx_case_list += [tmp]


sum_number = 0

for idx_list in idx_case_list:

    pick_list = [l[idx_list[0]],l[idx_list[1]],l[idx_list[2]]]

    if sum(pick_list) <= M:

        if sum(pick_list) > sum_number:

            sum_number = sum(pick_list)

print(sum_number)

```

제출한 코드


```python

from itertools import*

n,m,*l=map(int,open(0).read().split())

print(max(x for x in map(sum,combinations(l,3))if x<=m))

```

itertools 을 사용해서 풀어야 풀이가 짧아지는걸로 생각된다. 주어지는 수를 가져온 뒤에, 리스트에서 3장 뽑아서 sum한것들 중에, M을 넘지 않으면서 가장 큰 것을 출력하기.  

짧게 완성한 사람들 코드가 다 이렇다. 나는 카드중에 M을 넘는 숫자를 지우는 코드를 넣었는데 필요없는 코드인듯 싶다.  

조합 함수를 잘 안써봐서 인덱스를 리스트에 저장하고, 그걸로 뽑아오는 코드를 작성했는데, 그냥 리스트에서 직접 뽑으면 된다.