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

