만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

다트 (Darts)

면접 대비

시간 제한1초메모리 제한256 MB

요약
최대 4개의 화살과 N개 영역 점수가 주어질 때, M을 넘지 않는 최대 합을 구하고 모든 합이 M을 넘으면 0을 출력한다.
난이도

보통10점 중 6점

유형
이분 탐색, 정렬, 완전 탐색, 투 포인터
정답자
아직 제출이 없습니다

문제

다음 규칙에 따라 다트 게임을 한다.

  • 과녁을 향해 화살을 최대 4개까지 던질 수 있다. 반드시 4개를 모두 던질 필요는 없으며, 한 개도 던지지 않아도 된다.
  • 과녁은 NN개의 부분으로 나뉘어 있고, 각 부분에는 점수 P1,…,PNP_1, \dots, P_N이 적혀 있다. 한 부분에 여러 화살이 꽂혀도 되며, 그때마다 그 부분의 점수가 더해진다.
  • 화살이 꽂힌 부분들의 점수 합 SS가 득점의 기준이 된다.
  • 미리 정해진 점수 MM에 대해, S≤MS \le M이면 SS가 그대로 득점이 된다. 그러나 SS가 MM을 초과하면 득점은 00점이 된다.

과녁에 적힌 점수들과 MM의 값이 주어질 때, 얻을 수 있는 득점의 최댓값을 구하는 프로그램을 작성하여라.

입력

표준 입력으로 다음 데이터가 주어진다.

  • 첫째 줄에 두 정수 NN과 MM이 공백으로 구분되어 주어진다. 과녁이 NN개의 부분으로 나뉘어 있고, 미리 정해진 점수가 MM임을 뜻한다.
  • 이어지는 NN개의 줄 중 ii번째 줄 (1≤i≤N1 \le i \le N)에는 정수 PiP_i가 주어진다. 이는 과녁의 ii번째 부분에 적힌 점수가 PiP_i임을 뜻한다.

출력

얻을 수 있는 득점의 최댓값을 한 줄에 출력한다.

제한

  • 1≤N≤10001 \le N \le 1000
  • 1≤M≤2×1081 \le M \le 2 \times 10^8
  • 1≤Pi≤1081 \le P_i \le 10^8

예제2

  1. 예제 1

    입력
    4 50
    3
    14
    15
    9
    
    예상 출력
    48
    
  2. 예제 2

    입력
    3 21
    16
    11
    2
    
    예상 출력
    20