/* paiza POH! Vol.1
* result:
* http://p...content-available-to-author-only...a.jp/poh/ec-campaign/result/0c371ebace27b7f2fb8ee1dfb57bfbd4
* author: Leonardone @ NEETSDKASU
*/
#include <stdio.h>
#include <stdlib.h>
#define DFSIZE (5)
int list[500000];
int mysort( const void * a , const void * b ) {
return *(int*)b - *(int*)a;
}
inline int gc(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 pi(register int n) {
register int t;
if (n < 10) {
} else {
t = n / 10;
pi(t);
}
}
int foo(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 foo(p, ci, e, m);
} else {
return foo(p, f, ci, m);
}
}
int bar(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 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;
n = gc();
d = gc();
f = list;
j = n;
while (j) {
f[--j] = gc();
}
qsort(list
, n
, sizeof(int), mysort
);
--n;
j = d + 1;
while (--j) {
m = gc();
f = list + (fi = foo(list, 0, n, m));
e = list + bar(list, fi, n, m - *f);
tmp = 0;
while (f != e) {
sum = *f + *e;
if (sum > m)
++f;
else {
if (sum > tmp) tmp = sum;
--e;
}
}
pi(tmp);
}
return 0;
}
LyogcGFpemEgUE9IISBWb2wuMQogKiByZXN1bHQ6CiAqIGh0dHA6Ly9wLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5hLmpwL3BvaC9lYy1jYW1wYWlnbi9yZXN1bHQvMGMzNzFlYmFjZTI3YjdmMmZiOGVlMWRmYjU3YmZiZDQKICogYXV0aG9yOiBMZW9uYXJkb25lIEAgTkVFVFNES0FTVQogKi8KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2RlZmluZSBERlNJWkUgKDUpCgppbnQgbGlzdFs1MDAwMDBdOwoKaW50IG15c29ydCggY29uc3Qgdm9pZCAqIGEgLCBjb25zdCB2b2lkICogYiApIHsKCXJldHVybiAqKGludCopYiAtICooaW50KilhOwp9CgppbmxpbmUgaW50IGdjKHZvaWQpIHsKICAgIHJlZ2lzdGVyIGludCBjLCBuID0gMDsKICAgIGRvIHsKICAgICAgICBjID0gZ2V0Y2hhcigpOwogICAgfSB3aGlsZSAoKGMgPCAnMCcpIHx8IChjID4gJzknKSk7CiAgICBkbyB7CiAgICAgICAgbiA9IG4gKiAxMCArIChjIC0gJzAnKTsKICAgICAgICBjID0gZ2V0Y2hhcigpOwogICAgfSB3aGlsZSAoKGMgPj0gJzAnKSAmJiAoYyA8PSAnOScpKTsKICAgIHJldHVybiBuOwp9Cgp2b2lkIHBpKHJlZ2lzdGVyIGludCBuKSB7CglyZWdpc3RlciBpbnQgdDsKCWlmIChuIDwgMTApIHsKCQlwdXRjaGFyKG4gKyAnMCcpOwoJfSBlbHNlIHsKCQl0ID0gbiAvIDEwOwoJCXBpKHQpOwoJCXB1dGNoYXIobiAtIHQgKiAxMCArICcwJyk7Cgl9Cn0KCmludCBmb28oY29uc3QgaW50ICpwLCBjb25zdCBpbnQgZiwgY29uc3QgaW50IGUsIGNvbnN0IGludCBtKSB7CiAgICBpbnQgY2ksIGRmID0gZSAtIGY7CiAgICBpZiAoZGYgPCBERlNJWkUpIHJldHVybiBmOwogICAgaWYgKG0gPCBwW2NpID0gKGYgKyAoZGYgPj4gMSkpXSkgewogICAgICAgIHJldHVybiBmb28ocCwgY2ksIGUsIG0pOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZm9vKHAsIGYsIGNpLCBtKTsKICAgIH0KfQoKaW50IGJhcihjb25zdCBpbnQgKnAsIGNvbnN0IGludCBmLCBjb25zdCBpbnQgZSwgY29uc3QgaW50IG0pIHsKICAgIGludCBjaSwgZGYgPSBlIC0gZjsKICAgIGlmIChkZiA8IERGU0laRSkgcmV0dXJuIGU7CiAgICBpZiAobSA8IHBbY2kgPSAoZiArIChkZiA+PiAxKSldKSB7CiAgICAgICAgcmV0dXJuIGJhcihwLCBjaSwgZSwgbSk7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBiYXIocCwgZiwgY2ksIG0pOwogICAgfQp9CgppbnQgbWFpbih2b2lkKSB7CiAgICByZWdpc3RlciBpbnQgaiwgKmYsICplLCBzdW0sIHRtcDsKICAgIGludCBuLCBkLCBtLCBwLCBmaTsKICAgIAogICAgbiA9IGdjKCk7CiAgICBkID0gZ2MoKTsKICAgIAogICAgZiA9IGxpc3Q7CiAgICBqID0gbjsKICAgIHdoaWxlIChqKSB7CiAgICAgICAgZlstLWpdID0gZ2MoKTsKICAgIH0KICAgIHFzb3J0KGxpc3QsIG4sIHNpemVvZihpbnQpLCBteXNvcnQpOwogICAgCiAgICAtLW47CiAgICBqID0gZCArIDE7CiAgICB3aGlsZSAoLS1qKSB7CiAgICAgICAgbSA9IGdjKCk7CiAgICAgICAgZiA9IGxpc3QgKyAoZmkgPSBmb28obGlzdCwgMCwgbiwgbSkpOwogICAgICAgIGUgPSBsaXN0ICsgYmFyKGxpc3QsIGZpLCBuLCBtIC0gKmYpOwogICAgICAgIHRtcCA9IDA7CiAgICAgICAgd2hpbGUgKGYgIT0gZSkgewogICAgICAgICAgICBzdW0gPSAqZiArICplOwogICAgICAgICAgICBpZiAoc3VtID4gbSkKICAgICAgICAgICAgICAgICsrZjsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoc3VtID4gdG1wKSB0bXAgPSBzdW07CiAgICAgICAgICAgICAgICAtLWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcGkodG1wKTsKICAgICAgICBwdXRjaGFyKCdcbicpOwogICAgfQogICAgcmV0dXJuIDA7Cn0KCg==