003 - ダーツ

時間制限 1.5 秒 / メモリ制限 64 MB / 得点 100 / x 3 /


TLE
1.5sec
MLE
64MB
得点
100

問題

あなたは以下のルールでダーツゲームをすることになった.

あなたは,矢を的(まと)に向かって 4 本まで投げることができる.必ず しも 4 本全てを投げる必要はなく,1 本も投げなくてもかまわない.的 は N 個の部分に区切られていて,各々の部分に点数 P1,..., PN が書か れている.矢が刺さった場所の点数の合計 S があなたの得点の基礎とな る.S があらかじめ決められたある点数 M 以下の場合は S がそのまま あなたの得点となる.しかし,S が M を超えた場合はあなたの得点は 0 点となる.

的に書かれている点数と M の値が与えられたとき,あなたが得ることのできる 点数の最大値を求めるプログラムを作成せよ.

入力

入力ファイルのファイル名は input.txt である.

1 行目には,整数 N (1 ≤ N ≤ 1000) と M (1 ≤ M ≤ 200000000 = 2 × 108)がこの順に空白区切りで書かれている.2 行目以降の第 1 + i 行目 (1 ≤ i ≤ N ) には, Pi (1 ≤ Pi ≤ 100000000 = 108 ) が書かれている.

採点用データのうち, 配点の 20% 分は N ≤ 100 を満たし,配点の 50% 分は N ≤ 300 を満たす.

出力

出力ファイルのファイル名は output.txt である. output.txt は 1 行だけからなり,あなたが得ることのできる点数の最大値を含む.

入出力の例

例1

input.txt

4 50
3
14
15
9

output.txt

48

この例では,15 点の部分に 3 本,3 点の部分に 1 本の矢が刺さった場合にあなたの 得点は最大になり,その得点は 48 点である.

例2

input.txt

3 21
16
11
2

output.txt

20

この例では,16 点の場所に 1 本,2 点の場所に 2 本の矢が刺さった場合にあなたの 得点は最大になり,その得点は 20 点である.