/* paiza POH! Vol.1
* result:
* http://p...content-available-to-author-only...a.jp/poh/ec-campaign/result/5975d2a5b6f63a8987e7ab28606fa153
* 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, df;
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();
tmp = 0;
f = list + (fi = foo(list, 0, n, m));
if ((df = m - *f) <= *f) {
e = list + bar(list, 0, fi, df);
do {
while (df > *e) ++e;
if ((df < *e) || (f == e)) --e;
if (((sum = *f + *e) > tmp) && (sum <= m)) {
if ((tmp = sum) == m) break;
}
--f;
} while ((df = m - *f) <= *f);
}
putInt(tmp);
}
return 0;
}
LyogcGFpemEgUE9IISBWb2wuMQogKiByZXN1bHQ6CiAqIGh0dHA6Ly9wLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5hLmpwL3BvaC9lYy1jYW1wYWlnbi9yZXN1bHQvNTk3NWQyYTViNmY2M2E4OTg3ZTdhYjI4NjA2ZmExNTMKICogYXV0aG9yOiBMZW9uYXJkb25lIEAgTkVFVFNES0FTVQogKi8KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2RlZmluZSBERlNJWkUgKDUpCgppbnQgcHJpY2VbMTAwMDAwMF0gPSB7MH07CmludCBsaXN0WzUwMDAwMF07CgppbmxpbmUgaW50IGdldEludCh2b2lkKSB7CglyZWdpc3RlciBpbnQgYywgbiA9IDA7CglkbyB7CgkJYyA9IGdldGNoYXIoKTsKCX0gd2hpbGUgKChjIDwgJzAnKSB8fCAoYyA+ICc5JykpOwoJZG8gewoJCW4gPSBuICogMTAgKyAoYyAtICcwJyk7CgkJYyA9IGdldGNoYXIoKTsKCX0gd2hpbGUgKChjID49ICcwJykgJiYgKGMgPD0gJzknKSk7CglyZXR1cm4gbjsKfQoKdm9pZCBwdXRJbnQocmVnaXN0ZXIgaW50IG4pIHsKCXJlZ2lzdGVyIGludCB0OwoJaWYgKG4gPCAxMCkgewoJCXB1dGNoYXIobiArICcwJyk7Cgl9IGVsc2UgewoJCXQgPSBuIC8gMTA7CgkJcHV0SW50KHQpOwoJCXB1dGNoYXIobiAtIHQgKiAxMCArICcwJyk7Cgl9Cn0KCmludCBmb28oY29uc3QgaW50ICpwLCBjb25zdCBpbnQgZiwgY29uc3QgaW50IGUsIGNvbnN0IGludCBtKSB7CglpbnQgY2ksIGRmID0gZSAtIGY7CglpZiAoZGYgPCBERlNJWkUpIHJldHVybiBlOwoJaWYgKG0gPCBwW2NpID0gKGYgKyAoZGYgPj4gMSkpXSkgewoJCXJldHVybiBmb28ocCwgZiwgY2ksIG0pOwoJfSBlbHNlIHsKCQlyZXR1cm4gZm9vKHAsIGNpLCBlLCBtKTsKCX0KfQoKaW50IGJhcihjb25zdCBpbnQgKnAsIGNvbnN0IGludCBmLCBjb25zdCBpbnQgZSwgY29uc3QgaW50IG0pIHsKCWludCBjaSwgZGYgPSBlIC0gZjsKCWlmIChkZiA8IERGU0laRSkgcmV0dXJuIGY7CglpZiAobSA+IHBbY2kgPSAoZiArIChkZiA+PiAxKSldKSB7CgkJcmV0dXJuIGJhcihwLCBjaSwgZSwgbSk7Cgl9IGVsc2UgewoJCXJldHVybiBiYXIocCwgZiwgY2ksIG0pOwoJfQp9CgppbnQgbWFpbih2b2lkKSB7CglyZWdpc3RlciBpbnQgaiwgKmYsICplLCBzdW0sIHRtcDsKCWludCBuLCBkLCBtLCBwLCBmaSwgaSwgZGY7CiAgICAKCW4gPSBnZXRJbnQoKTsKCWQgPSBnZXRJbnQoKTsKICAgIAoJaiA9IG4gKyAxOwoJd2hpbGUgKC0taikgewoJCSsrcHJpY2VbZ2V0SW50KCldOwoJfQogICAgCgkvKiBzb3J0ICovCglqID0gMDsKCWkgPSAxMDsKCWRvIHsKCQl3aGlsZSAoIXByaWNlW2ldKSArK2k7CgkJLS1wcmljZVtpXTsKCQlsaXN0W2pdID0gaTsKCQkrK2o7Cgl9IHdoaWxlIChqIDwgbik7CiAgICAKCS0tbjsKCWogPSBkICsgMTsKCXdoaWxlICgtLWopIHsKCQltID0gZ2V0SW50KCk7CgkJdG1wID0gMDsKCQlmID0gbGlzdCArIChmaSA9IGZvbyhsaXN0LCAwLCBuLCBtKSk7CgkJaWYgKChkZiA9IG0gLSAqZikgPD0gKmYpIHsKCQkJZSA9IGxpc3QgKyBiYXIobGlzdCwgMCwgZmksIGRmKTsKCQkJZG8gewoJCQkJd2hpbGUgKGRmID4gKmUpICsrZTsKCQkJCWlmICgoZGYgPCAqZSkgfHwgKGYgPT0gZSkpIC0tZTsKCQkJCWlmICgoKHN1bSA9ICpmICsgKmUpID4gdG1wKSAmJiAoc3VtIDw9IG0pKSB7CgkJCQkJaWYgKCh0bXAgPSBzdW0pID09IG0pIGJyZWFrOwoJCQkJfQoJCQkJLS1mOwoJCQl9IHdoaWxlICgoZGYgPSBtIC0gKmYpIDw9ICpmKTsKCQl9CgkJcHV0SW50KHRtcCk7CgkJcHV0Y2hhcignXG4nKTsKCX0KCXJldHVybiAwOwp9Cgo=