/* paiza POH! Vol.1
* result:
* http://p...content-available-to-author-only...a.jp/poh/ec-campaign/result/1e6a3a72f80fd4e8a12dee38bbd71aa9
* author: Leonardone @ NEETSDKASU
*/
#include <stdio.h>
#include <stdlib.h>
#define DFSIZE (5)
int price[1000000] = {0};
int list[500000];
inline int getInt(void) {
register int c, n = 0;
do {
} while ((c < '0') || (c > '9'));
do {
n = n * 10 + (c - '0');
} while ((c >= '0') && (c <= '9'));
return n;
}
void putInt(register int n) {
register int t;
if (n < 10) {
} else {
t = n / 10;
putInt(t);
}
}
int foo(const int *p, const int f, const int e, const int m) {
int ci, df = e - f;
if (df < DFSIZE) return e;
if (m < p[ci = (f + (df >> 1))]) {
return foo(p, f, ci, m);
} else {
return foo(p, ci, e, m);
}
}
int bar(const int *p, const int f, const int e, const int m) {
int ci, df = e - f;
if (df < DFSIZE) return f;
if (m > p[ci = (f + (df >> 1))]) {
return bar(p, ci, e, m);
} else {
return bar(p, f, ci, m);
}
}
int main(void) {
register int j, *f, *e, sum, tmp;
int n, d, m, p, fi, i;
n = getInt();
d = getInt();
j = n + 1;
while (--j) {
++price[getInt()];
}
/* sort */
j = 0;
i = 10;
do {
while (!price[i]) ++i;
--price[i];
list[j] = i;
++j;
} while (j < n);
--n;
j = d + 1;
while (--j) {
m = getInt();
f = list + (fi = foo(list, 0, n, m));
e = list + bar(list, 0, fi, m - *f);
tmp = 0;
while (f != e) {
sum = *f + *e;
if (sum > m)
--f;
else {
if (sum > tmp) tmp = sum;
++e;
}
}
putInt(tmp);
}
return 0;
}
LyogcGFpemEgUE9IISBWb2wuMQogKiByZXN1bHQ6CiAqIGh0dHA6Ly9wLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5hLmpwL3BvaC9lYy1jYW1wYWlnbi9yZXN1bHQvMWU2YTNhNzJmODBmZDRlOGExMmRlZTM4YmJkNzFhYTkKICogYXV0aG9yOiBMZW9uYXJkb25lIEAgTkVFVFNES0FTVQogKi8KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2RlZmluZSBERlNJWkUgKDUpCgppbnQgcHJpY2VbMTAwMDAwMF0gPSB7MH07CmludCBsaXN0WzUwMDAwMF07CgppbmxpbmUgaW50IGdldEludCh2b2lkKSB7CiAgICByZWdpc3RlciBpbnQgYywgbiA9IDA7CiAgICBkbyB7CiAgICAgICAgYyA9IGdldGNoYXIoKTsKICAgIH0gd2hpbGUgKChjIDwgJzAnKSB8fCAoYyA+ICc5JykpOwogICAgZG8gewogICAgICAgIG4gPSBuICogMTAgKyAoYyAtICcwJyk7CiAgICAgICAgYyA9IGdldGNoYXIoKTsKICAgIH0gd2hpbGUgKChjID49ICcwJykgJiYgKGMgPD0gJzknKSk7CiAgICByZXR1cm4gbjsKfQoKdm9pZCBwdXRJbnQocmVnaXN0ZXIgaW50IG4pIHsKCXJlZ2lzdGVyIGludCB0OwoJaWYgKG4gPCAxMCkgewoJCXB1dGNoYXIobiArICcwJyk7Cgl9IGVsc2UgewoJCXQgPSBuIC8gMTA7CgkJcHV0SW50KHQpOwoJCXB1dGNoYXIobiAtIHQgKiAxMCArICcwJyk7Cgl9Cn0KCmludCBmb28oY29uc3QgaW50ICpwLCBjb25zdCBpbnQgZiwgY29uc3QgaW50IGUsIGNvbnN0IGludCBtKSB7CiAgICBpbnQgY2ksIGRmID0gZSAtIGY7CiAgICBpZiAoZGYgPCBERlNJWkUpIHJldHVybiBlOwogICAgaWYgKG0gPCBwW2NpID0gKGYgKyAoZGYgPj4gMSkpXSkgewogICAgICAgIHJldHVybiBmb28ocCwgZiwgY2ksIG0pOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZm9vKHAsIGNpLCBlLCBtKTsKICAgIH0KfQoKaW50IGJhcihjb25zdCBpbnQgKnAsIGNvbnN0IGludCBmLCBjb25zdCBpbnQgZSwgY29uc3QgaW50IG0pIHsKICAgIGludCBjaSwgZGYgPSBlIC0gZjsKICAgIGlmIChkZiA8IERGU0laRSkgcmV0dXJuIGY7CiAgICBpZiAobSA+IHBbY2kgPSAoZiArIChkZiA+PiAxKSldKSB7CiAgICAgICAgcmV0dXJuIGJhcihwLCBjaSwgZSwgbSk7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBiYXIocCwgZiwgY2ksIG0pOwogICAgfQp9CgppbnQgbWFpbih2b2lkKSB7CiAgICByZWdpc3RlciBpbnQgaiwgKmYsICplLCBzdW0sIHRtcDsKICAgIGludCBuLCBkLCBtLCBwLCBmaSwgaTsKICAgIAogICAgbiA9IGdldEludCgpOwogICAgZCA9IGdldEludCgpOwogICAgCiAgICBqID0gbiArIDE7CiAgICB3aGlsZSAoLS1qKSB7CiAgICAgICAgKytwcmljZVtnZXRJbnQoKV07CiAgICB9CiAgICAKICAgIC8qIHNvcnQgKi8KICAgIGogPSAwOwogICAgaSA9IDEwOwogICAgZG8gewogICAgCXdoaWxlICghcHJpY2VbaV0pICsraTsKICAgIAktLXByaWNlW2ldOwogICAgCWxpc3Rbal0gPSBpOwogICAgCSsrajsKICAgIH0gd2hpbGUgKGogPCBuKTsKICAgIAogICAgLS1uOwogICAgaiA9IGQgKyAxOwogICAgd2hpbGUgKC0taikgewogICAgICAgIG0gPSBnZXRJbnQoKTsKICAgICAgICBmID0gbGlzdCArIChmaSA9IGZvbyhsaXN0LCAwLCBuLCBtKSk7CiAgICAgICAgZSA9IGxpc3QgKyBiYXIobGlzdCwgMCwgZmksIG0gLSAqZik7CiAgICAgICAgdG1wID0gMDsKICAgICAgICB3aGlsZSAoZiAhPSBlKSB7CiAgICAgICAgICAgIHN1bSA9ICpmICsgKmU7CiAgICAgICAgICAgIGlmIChzdW0gPiBtKQogICAgICAgICAgICAgICAgLS1mOwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChzdW0gPiB0bXApIHRtcCA9IHN1bTsKICAgICAgICAgICAgICAgICsrZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwdXRJbnQodG1wKTsKICAgICAgICBwdXRjaGFyKCdcbicpOwogICAgfQogICAgcmV0dXJuIDA7Cn0KCg==