/* paiza POH! Vol.1
* result:
* http://p...content-available-to-author-only...a.jp/poh/ec-campaign/result/3999135a6325fb8b1b6a3b282512e299
* author: Leonardone @ NEETSDKASU
*/
#include <stdio.h>
#include <stdlib.h>
/* 商品の最大価格 */
#define PMAX (1000000)
/* 商品の価格ごとの個数を格納する */
int list[PMAX + 1] = {1,1,1,1,1, 1,1,1,1,1};
/* putInt()用 */
char str[10] = {'\n'};
/* scanf("%d", &n) が遅い気がするから代わりに */
inline int getInt(void) {
int c, n = 0;
do {
} while ((c < '0') || (c > '9'));
do {
n = n * 10 + (c - '0');
} while ((c >= '0') && (c <= '9'));
return n;
}
/* printf("%d\n", n)が遅い気がするから代わりに */
inline void putInt(int n) {
int t, i = 1;
do {
t = n / 10;
str[i] = n - t * 10 + '0';
++i; n = t;
} while (n > 0);
do {
} while (i);
}
int main(void) {
int i, u, tmp, n, d, m;
n = getInt(); /* 商品の数 */
d = getInt(); /* キャンペーンの日数 */
/* 商品の価格ごとの個数を数える */
do {
++list[getInt()];
} while (--n);
/* アルゴリズム
* 例えばキャンペーン上限が 10000 だとしたら
* (A) 9999から存在する商品を見つける
* (例えば 9999~9801 まで商品が なく 9800 で初めて見つかるなど)
* (B) 次に 200 (= 10000 - 9800) から存在する価格を見つける
* (例えば 200~121 まで商品がなく 120 で初めて商品を見つかるなど)
* (C) ここで 9800 + 120 = 9920 を見つけた合計値とし
* それまでに見つけた最大値と比較、上限値に達した場合はループを抜ける
* 次に 9799 から同様に(A)~(C)の手順を繰り返して探していく
*/
do {
/* キャンペーン上限の取得 */
i = m = getInt();
/* 見つけた最大値を保持する(見つからなかった場合の0で初期化) */
tmp = 0;
do {
/* (A)の大きい側の価格の商品を見つける */
--i;
while(!list[i]) --i;
/* (B)の探索開始の価格を決める */
/* (A)と(B)が逆転したら探索終了 */
if ((u = m - i) > i) break;
/* (A)と(B)が同じ価格の場合、 */
/* 商品が2個以上なければ(B)の開始値を下げる */
if ((i == u) && (list[i] < 2)) --u;
/* (B)の小さい側の価格の商品を見つける */
while (!list[u]) --u;
/* 合計値(u += i)、最大値tmp、上限値m */
/* 最大値の更新および、上限値に達した場合の探索終了(ループ抜け) */
if ((u > 9) && ((u += i) > tmp) && ((tmp = u) == m)) break;
} while (1);
/* 結果の表示 */
putInt(tmp);
} while (--d);
return 0;
}
LyogcGFpemEgUE9IISBWb2wuMQogKiByZXN1bHQ6CiAqIGh0dHA6Ly9wLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5hLmpwL3BvaC9lYy1jYW1wYWlnbi9yZXN1bHQvMzk5OTEzNWE2MzI1ZmI4YjFiNmEzYjI4MjUxMmUyOTkKICogYXV0aG9yOiBMZW9uYXJkb25lIEAgTkVFVFNES0FTVQogKi8KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8qIOWVhuWTgeOBruacgOWkp+S+oeagvCAqLwojZGVmaW5lIFBNQVggKDEwMDAwMDApCgovKiDllYblk4Hjga7kvqHmoLzjgZTjgajjga7lgIvmlbDjgpLmoLzntI3jgZnjgosgKi8KaW50IGxpc3RbUE1BWCArIDFdID0gezEsMSwxLDEsMSwgMSwxLDEsMSwxfTsKCi8qIHB1dEludCgp55SoICovCmNoYXIgc3RyWzEwXSA9IHsnXG4nfTsKCi8qIHNjYW5mKCIlZCIsICZuKSDjgYzpgYXjgYTmsJfjgYzjgZnjgovjgYvjgonku6Pjgo/jgorjgasgKi8KaW5saW5lIGludCBnZXRJbnQodm9pZCkgewogICAgaW50IGMsIG4gPSAwOwogICAgZG8gewogICAgICAgIGMgPSBnZXRjaGFyKCk7CiAgICB9IHdoaWxlICgoYyA8ICcwJykgfHwgKGMgPiAnOScpKTsKICAgIGRvIHsKICAgICAgICBuID0gbiAqIDEwICsgKGMgLSAnMCcpOwogICAgICAgIGMgPSBnZXRjaGFyKCk7CiAgICB9IHdoaWxlICgoYyA+PSAnMCcpICYmIChjIDw9ICc5JykpOwogICAgcmV0dXJuIG47Cn0KCi8qIHByaW50ZigiJWRcbiIsIG4p44GM6YGF44GE5rCX44GM44GZ44KL44GL44KJ5Luj44KP44KK44GrICovCmlubGluZSB2b2lkIHB1dEludChpbnQgbikgewoJaW50IHQsIGkgPSAxOwoJZG8gewoJCXQgPSBuIC8gMTA7CgkJc3RyW2ldID0gbiAtIHQgKiAxMCArICcwJzsKCQkrK2k7IG4gPSB0OwoJfSB3aGlsZSAobiA+IDApOwoJZG8gewoJCXB1dGNoYXIoc3RyWy0taV0pOwoJfSB3aGlsZSAoaSk7Cn0KCmludCBtYWluKHZvaWQpIHsKICAgIGludCBpLCB1LCB0bXAsIG4sIGQsIG07CiAgICAKICAgIG4gPSBnZXRJbnQoKTsgLyog5ZWG5ZOB44Gu5pWwICAgICAgICAgIAkqLwogICAgZCA9IGdldEludCgpOyAvKiDjgq3jg6Pjg7Pjg5rjg7zjg7Pjga7ml6XmlbAJKi8KICAgIAogICAgLyog5ZWG5ZOB44Gu5L6h5qC844GU44Go44Gu5YCL5pWw44KS5pWw44GI44KLICovCiAgICBkbyB7CiAgICAgICAgKytsaXN0W2dldEludCgpXTsKICAgIH0gd2hpbGUgKC0tbik7CiAgICAKICAgIC8qIOOCouODq+OCtOODquOCuuODoAogICAgICog5L6L44GI44Gw44Kt44Oj44Oz44Oa44O844Oz5LiK6ZmQ44GMIDEwMDAwIOOBoOOBqOOBl+OBn+OCiQogICAgICogKEEpIDk5OTnjgYvjgonlrZjlnKjjgZnjgovllYblk4HjgpLopovjgaTjgZHjgosgCiAgICAgKiAgICjkvovjgYjjgbAgOTk5Oe+9njk4MDEg44G+44Gn5ZWG5ZOB44GMIOOBquOBjyA5ODAwIOOBp+WIneOCgeOBpuimi+OBpOOBi+OCi+OBquOBqSkKICAgICAqIChCKSDmrKHjgasgMjAwICg9IDEwMDAwIC0gOTgwMCkg44GL44KJ5a2Y5Zyo44GZ44KL5L6h5qC844KS6KaL44Gk44GR44KLIAogICAgICogICAo5L6L44GI44GwIDIwMO+9njEyMSDjgb7jgafllYblk4HjgYzjgarjgY8gMTIwIOOBp+WIneOCgeOBpuWVhuWTgeOCkuimi+OBpOOBi+OCi+OBquOBqSkKICAgICAqIChDKSDjgZPjgZPjgacgOTgwMCArIDEyMCA9IDk5MjAg44KS6KaL44Gk44GR44Gf5ZCI6KiI5YCk44Go44GXCiAgICAgKiAgIOOBneOCjOOBvuOBp+OBq+imi+OBpOOBkeOBn+acgOWkp+WApOOBqOavlOi8g+OAgeS4iumZkOWApOOBq+mBlOOBl+OBn+WgtOWQiOOBr+ODq+ODvOODl+OCkuaKnOOBkeOCiwogICAgICog5qyh44GrIDk3OTkg44GL44KJ5ZCM5qeY44GrKEEp772eKEMp44Gu5omL6aCG44KS57mw44KK6L+U44GX44Gm5o6i44GX44Gm44GE44GPCiAgICAgKi8KICAgIGRvIHsKICAgIAkvKiDjgq3jg6Pjg7Pjg5rjg7zjg7PkuIrpmZDjga7lj5blvpcgKi8KICAgICAgICBpID0gbSA9IGdldEludCgpOwogICAgICAgIAogICAgICAgIC8qIOimi+OBpOOBkeOBn+acgOWkp+WApOOCkuS/neaMgeOBmeOCiyjopovjgaTjgYvjgonjgarjgYvjgaPjgZ/loLTlkIjjga4w44Gn5Yid5pyf5YyWKSAqLwogICAgICAgIHRtcCA9IDA7IAogICAgICAgIAoJCWRvIHsKCQkJIC8qIChBKeOBruWkp+OBjeOBhOWBtOOBruS+oeagvOOBruWVhuWTgeOCkuimi+OBpOOBkeOCiyAqLwoJCQktLWk7CgkJCXdoaWxlKCFsaXN0W2ldKSAtLWk7CgkJCQoJCQkvKiAoQinjga7mjqLntKLplovlp4vjga7kvqHmoLzjgpLmsbrjgoHjgosJKi8KCQkJLyogKEEp44GoKEIp44GM6YCG6Lui44GX44Gf44KJ5o6i57Si57WC5LqGICovCgkJCWlmICgodSA9IG0gLSBpKSA+IGkpIGJyZWFrOyAKCQkJCgkJCS8qIChBKeOBqChCKeOBjOWQjOOBmOS+oeagvOOBruWgtOWQiOOAgSAgICAgICAgICAgIAkqLwoJCQkvKiDllYblk4HjgYwy5YCL5Lul5LiK44Gq44GR44KM44GwKEIp44Gu6ZaL5aeL5YCk44KS5LiL44GS44KLICovCgkJCWlmICgoaSA9PSB1KSAmJiAobGlzdFtpXSA8IDIpKSAtLXU7CgkJCQoJCQkvKiAoQinjga7lsI/jgZXjgYTlgbTjga7kvqHmoLzjga7llYblk4HjgpLopovjgaTjgZHjgosgKi8KCQkJd2hpbGUgKCFsaXN0W3VdKSAtLXU7IAoJCQkKCQkJLyog5ZCI6KiI5YCkKHUgKz0gaSnjgIHmnIDlpKflgKR0bXDjgIHkuIrpmZDlgKRtICAgICAgICAgICAgICAgICAgICAgICAgIAkqLwoJCQkvKiDmnIDlpKflgKTjga7mm7TmlrDjgYrjgojjgbPjgIHkuIrpmZDlgKTjgavpgZTjgZfjgZ/loLTlkIjjga7mjqLntKLntYLkuoYo44Or44O844OX5oqc44GRKSAqLwoJCQlpZiAoKHUgPiA5KSAmJiAoKHUgKz0gaSkgPiB0bXApICYmICgodG1wID0gdSkgPT0gbSkpIGJyZWFrOwoKICAgICAgICB9IHdoaWxlICgxKTsKICAgICAgICAKICAgICAgICAvKiDntZDmnpzjga7ooajnpLogKi8KICAgICAgICBwdXRJbnQodG1wKTsKICAgICAgICAKICAgIH0gd2hpbGUgKC0tZCk7CgkKICAgIHJldHVybiAwOwp9Cgo=