#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353, G = 3;
const int MAXN = 1200010;
int inv[MAXN], fac[MAXN], invs[MAXN];
int binom(int n, int k) {
  return 1ll * fac[n] * invs[k] % MOD * invs[n - k] % MOD;
}
int fpow(int _a, int k) {
  long long b = 1, a = _a;
  for (; k; k >>= 1, a = a * a % MOD)
    if (k & 1) b = b * a % MOD;
  return int(b);
}
void dft(int a[], int DFT, int N) {
  static int rev[1 << 20];
  for (int i = 0; i < N; i++) {
    rev[i] = (rev[i >> 1] >> 1) | ((i & 1) ? (N >> 1) : 0);
    if (i < rev[i]) swap(a[i], a[rev[i]]);
  }
  for (int m = 2, m2 = 1; m <= N; m <<= 1, m2 <<= 1) {
    int wm = fpow(G, (MOD - 1) / m * DFT + (DFT == -1 ? MOD - 1 : 0));
    for (int k = 0; k < N; k += m)
      for (int j = 0, u, t, w = 1; j < m2; j++)
        t = 1ll * w * a[k + j + m2] % MOD, u = a[k + j], w = 1ll * w * wm % MOD,
        a[k + j] = (u + t) % MOD, a[k + j + m2] = (u - t + MOD) % MOD;
  }
  if (DFT == -1)
    for (int i = 0, invN = fpow(N, MOD - 2); i < N; i++)
      a[i] = 1ll * a[i] * invN % MOD;
}
int ans[MAXN], a[MAXN], b[6], f[MAXN], g[MAXN];
int main() {
  inv[1] = invs[0] = invs[1] = fac[0] = fac[1] = 1;
  for (int i = 2; i < MAXN; i++)
    inv[i] = 1ll * (MOD - MOD / i) * inv[MOD % i] % MOD,
    invs[i] = 1ll * invs[i - 1] * inv[i] % MOD,
    fac[i] = 1ll * i * fac[i - 1] % MOD;
  int n, k;
  scanf("%d %d", &n, &k);
  for (int i = 0, u; i < n; i++) scanf("%d", &u), a[u]++;
  for (int i = 0; i < k; i++) scanf("%d", &b[i]);
  for (int kase = 0; kase < k; kase++) {
    int c1 = 0, c2 = 0, tot = b[kase], t = 0;
    for (int j = 0; j < tot; j++) (a[j] > 1 ? c2 : a[j] == 1 ? c1 : t)++;
    for (int i = 0; i <= c2 * 2; i++) f[i] = binom(c2 * 2, i);
    for (int i = 0, j = 1; i <= c1; i++, j = (j + j) % MOD)
      g[i] = 1ll * binom(c1, i) * j % MOD;
    int tol = c1 + c2 + c2, len = 1;
    while (len <= tol) len <<= 1;
    for (int i = c2 * 2 + 1; i < len; i++) f[i] = 0;
    for (int i = c1 + 1; i < len; i++) g[i] = 0;
    dft(f, 1, len), dft(g, 1, len);
    for (int i = 0; i < len; i++) f[i] = 1ll * f[i] * g[i] % MOD;
    dft(f, -1, len);
    for (int i = 0; i < len; i++) (ans[i + 1 + tot] += f[i]) %= MOD;
  }
  int q, Q;
  scanf("%d", &q);
  while (q--) scanf("%d", &Q), printf("%d\n", ans[Q >> 1]);
  return 0;
}
