/* 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 {
        c = getchar();
    } while ((c < '0') || (c > '9'));
    do {
        n = n * 10 + (c - '0');
        c = getchar();
    } while ((c >= '0') && (c <= '9'));
    return n;
}

void putInt(register int n) {
	register int t;
	if (n < 10) {
		putchar(n + '0');
	} else {
		t = n / 10;
		putInt(t);
		putchar(n - t * 10 + '0');
	}
}

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);
        putchar('\n');
    }
    return 0;
}

