#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
int w[530005], r[530005], wlen, lg[530005];
int Pow(int a, int b) {
  int s = 1;
  for (; b; b >>= 1, a = 1ll * a * a % mod) b & 1 && (s = 1ll * s * a % mod);
  return s;
}
void init(int n) {
  w[0] = wlen = 1;
  while (wlen <= n) wlen <<= 1;
  w[1] = Pow(3, (mod - 1) / wlen);
  for (int i = 2; i <= wlen; i++)
    w[i] = 1ll * w[i - 1] * w[1] % mod, lg[i] = lg[i >> 1] + 1;
}
int upd(int x) { return x >= mod ? x - mod : x; }
void NTT(int *a, int len, int flg) {
  for (int i = 0; i < len; i++)
    if (i < r[i]) swap(a[i], a[r[i]]);
  for (int i = 2, l = 1, v; i <= len; l = i, i <<= 1)
    for (int j = 0, t = wlen / i; j < len; j += i)
      for (int k = j, o = 0; k < j + l; k++, o += t)
        a[k + l] =
            upd(a[k] - (v = 1ll * w[flg ^ 1 ? wlen - o : o] * a[k + l] % mod) +
                mod),
              a[k] = upd(a[k] + v);
  if (flg ^ 1)
    for (int i = 0, Inv = mod - (mod - 1) / len; i < len; i++)
      a[i] = 1ll * a[i] * Inv % mod;
}
void Mul(int *A, int n, int *B, int m, int *C) {
  static int a[530005], b[530005];
  int len = 1 << (lg[n + m] + 1);
  for (int i = 0; i < len; i++)
    a[i] = i <= n ? A[i] : 0, b[i] = i <= m ? B[i] : 0,
    r[i] = r[i >> 1] >> 1 | (i & 1 ? len >> 1 : 0);
  NTT(a, len, 1), NTT(b, len, 1);
  for (int i = 0; i < len; i++) C[i] = 1ll * a[i] * b[i] % mod;
  NTT(C, len, -1);
}
int n, k, Q, b[6], a[530005], f[530005], g[530005], fac[530005], inv[530005],
    pw[530005], ans[6][530005];
int C(int n, int m) { return 1ll * fac[n] * inv[m] % mod * inv[n - m] % mod; }
int main() {
  scanf("%d%d", &n, &k), init(n);
  fac[0] = fac[1] = inv[0] = inv[1] = pw[0] = 1, pw[1] = 2;
  for (int i = 2; i <= n; i++)
    fac[i] = 1ll * fac[i - 1] * i % mod,
    inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod,
    pw[i] = pw[i - 1] * 2 % mod;
  for (int i = 2; i <= n; i++) inv[i] = 1ll * inv[i] * inv[i - 1] % mod;
  for (int i = 1, x; i <= n; i++) scanf("%d", &x), a[x]++;
  for (int i = 1; i <= k; i++) scanf("%d", &b[i]);
  sort(b + 1, b + 1 + k);
  for (int i = 1; i <= k; i++) {
    int c1 = 0, c2 = 0;
    for (int j = 1; j < b[i]; j++) c1 += a[j] == 1, c2 += a[j] > 1;
    for (int j = 0; j <= c1; j++) f[j] = 1ll * pw[j] * C(c1, j) % mod;
    for (int j = 0; j <= 2 * c2; j++) g[j] = C(2 * c2, j);
    Mul(f, c1, g, 2 * c2, ans[i]);
  }
  scanf("%d", &Q);
  for (int x, ret; Q--;) {
    scanf("%d", &x), ret = 0;
    for (int i = 1; i <= k; i++)
      if (x / 2 > b[i] && x / 2 - b[i] - 1 <= n)
        ret = upd(ret + ans[i][x / 2 - b[i] - 1]);
    printf("%d\n", ret);
  }
}
