import java.util.;
import java.io.;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String text1 = br.readLine();
StringTokenizer st = new StringTokenizer(text1);
int[] words = new int[st.countTokens()];
int k =0;
while(st.hasMoreTokens())
{
words[k++] = Integer.parseInt(st.nextToken());
}
String text2 = br.readLine();
StringTokenizer sT = new StringTokenizer(text2);
int[] values = new int[sT.countTokens()];
int j=0;
while(sT.hasMoreTokens())
{
values[j++] = Integer.parseInt(sT.nextToken());
}
int max = 0;
for (int i = 0 ; i< values.length-2; i++)
{
for (int l=i+1; l < values.length-1; l++)
{
for (int s=l+1; s < values.length;s++)
{
int sum = values[s]+values[l]+values[i];
if (sum <= words[1] && sum > max){
max = sum;
}
}
}
}
System.out.println(max);
}
}
이번 문제는 처음보는 유형인 조합을 이용해서 푸는 문제였다. 문제를 풀며 제일 어려운 로직은 3중 for문으로 배열에 있는 값중 3개씩을 모두 더해서 구하는 로직이였다. 로직에 있어 int l = i+1, int s=l+1과 같이 전부 다 0부터 시작하는게 아니였다. 또한 범위도 i면 values.length-2와 같이 제한되는 경우도 있어 조합이라는 새로운 개념에 눈 뜨기 좋은 문제인 것 같다. 3중 for문은 지피티를 통해 알게되었고 조합 문제가 나왔을 때 어떻게 대처해야할 지 살짝은 알게된 것 같다!