/* paiza POH! Vol.1
 * result:
 * http://p...content-available-to-author-only...a.jp/poh/ec-campaign/result/3999135a6325fb8b1b6a3b282512e299
 * author: Leonardone @ NEETSDKASU
 */
#include <stdio.h>
#include <stdlib.h>

/* 商品の最大価格 */
#define PMAX (1000000)

/* 商品の価格ごとの個数を格納する */
int list[PMAX + 1] = {1,1,1,1,1, 1,1,1,1,1};

/* putInt()用 */
char str[10] = {'\n'};

/* scanf("%d", &n) が遅い気がするから代わりに */
inline int getInt(void) {
    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;
}

/* printf("%d\n", n)が遅い気がするから代わりに */
inline void putInt(int n) {
	int t, i = 1;
	do {
		t = n / 10;
		str[i] = n - t * 10 + '0';
		++i; n = t;
	} while (n > 0);
	do {
		putchar(str[--i]);
	} while (i);
}

int main(void) {
    int i, u, tmp, n, d, m;
    
    n = getInt(); /* 商品の数          	*/
    d = getInt(); /* キャンペーンの日数	*/
    
    /* 商品の価格ごとの個数を数える */
    do {
        ++list[getInt()];
    } while (--n);
    
    /* アルゴリズム
     * 例えばキャンペーン上限が 10000 だとしたら
     * (A) 9999から存在する商品を見つける 
     *   (例えば 9999～9801 まで商品が なく 9800 で初めて見つかるなど)
     * (B) 次に 200 (= 10000 - 9800) から存在する価格を見つける 
     *   (例えば 200～121 まで商品がなく 120 で初めて商品を見つかるなど)
     * (C) ここで 9800 + 120 = 9920 を見つけた合計値とし
     *   それまでに見つけた最大値と比較、上限値に達した場合はループを抜ける
     * 次に 9799 から同様に(A)～(C)の手順を繰り返して探していく
     */
    do {
    	/* キャンペーン上限の取得 */
        i = m = getInt();
        
        /* 見つけた最大値を保持する(見つからなかった場合の0で初期化) */
        tmp = 0; 
        
		do {
			 /* (A)の大きい側の価格の商品を見つける */
			--i;
			while(!list[i]) --i;
			
			/* (B)の探索開始の価格を決める	*/
			/* (A)と(B)が逆転したら探索終了 */
			if ((u = m - i) > i) break; 
			
			/* (A)と(B)が同じ価格の場合、            	*/
			/* 商品が2個以上なければ(B)の開始値を下げる */
			if ((i == u) && (list[i] < 2)) --u;
			
			/* (B)の小さい側の価格の商品を見つける */
			while (!list[u]) --u; 
			
			/* 合計値(u += i)、最大値tmp、上限値m                         	*/
			/* 最大値の更新および、上限値に達した場合の探索終了(ループ抜け) */
			if ((u > 9) && ((u += i) > tmp) && ((tmp = u) == m)) break;

        } while (1);
        
        /* 結果の表示 */
        putInt(tmp);
        
    } while (--d);
	
    return 0;
}

