#include <bits/stdc++.h>
using namespace std;
int n, K, a[2000006];
int Wl, Wl2, w[2000006], lg[2000006],
    inv[2000006] = {1, 1}, fac[2000006] = {1, 1}, invf[2000006] = {1, 1};
int Pow(int b, int k) {
  int r = 1;
  for (; k; k >>= 1, b = 1ll * b * b % 998244353)
    if (k & 1) r = 1ll * r * b % 998244353;
  return r;
}
void init(int n) {
  for (Wl = 1; n >= Wl << 1; Wl <<= 1)
    ;
  int pw = Pow(3, (998244353 - 1) / (Wl2 = Wl << 1));
  w[Wl] = 1;
  for (int i = (Wl + 1), LIM = (Wl2 - 1); i <= LIM; i++)
    w[i] = 1ll * w[i - 1] * pw % 998244353;
  for (int i = (Wl - 1), LIM = (1); i >= LIM; i--) w[i] = w[i << 1];
  for (int i = (2), LIM = (Wl2); i <= LIM; i++)
    inv[i] = 1ll * (998244353 - 998244353 / i) * inv[998244353 % i] % 998244353,
    lg[i] = lg[i >> 1] + 1, fac[i] = 1ll * fac[i - 1] * i % 998244353,
    invf[i] = 1ll * invf[i - 1] * inv[i] % 998244353;
}
void NTT(int *A, int n, int tp) {
  static int r[2000006];
  static unsigned long long a[2000006];
  if (tp ^ 1) reverse(A + 1, A + n);
  for (int i = (0), LIM = (n - 1); i <= LIM; i++)
    r[i] = r[i >> 1] >> 1 | (i & 1) << (lg[n] - 1),
    a[i] = (A[r[i]] += A[r[i]] >> 31 & 998244353);
  for (int L = 1; L < n; L <<= 1)
    for (int s = 0, L2 = L << 1; s < n; s += L2)
      for (int k = s, x = L, t; k < s + L; k++, x++)
        t = w[x] * a[k + L] % 998244353, a[k + L] = a[k] - t + 998244353,
        a[k] += t;
  for (int i = (0), LIM = (n - 1); i <= LIM; i++) A[i] = a[i] % 998244353;
  if (tp ^ 1)
    for (int i = (0), LIM = (n - 1); i <= LIM; i++)
      A[i] = 1ll * A[i] * inv[n] % 998244353;
}
void Mul(int *A, int *B, int *C, int n, int m) {
  static int st[2][2000006];
  int L = 1 << lg[n + m] + 1;
  for (int i = (0), LIM = (L - 1); i <= LIM; i++)
    st[0][i] = i <= n ? A[i] : 0, st[1][i] = i <= m ? B[i] : 0;
  NTT(st[0], L, 1), NTT(st[1], L, 1);
  for (int i = (0), LIM = (L - 1); i <= LIM; i++)
    C[i] = 1ll * st[0][i] * st[1][i] % 998244353;
  NTT(C, L, -1);
}
int cnt[2000006], b[6], A[2000006], B[2000006], C[6][2000006];
int main() {
  scanf("%d%d", &n, &K);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), cnt[a[i]]++;
  init(600000);
  for (int i = 1; i <= K; i++) {
    scanf("%d", &b[i]);
    int c1 = 0, c2 = 0;
    for (int j = 1; j < b[i]; j++)
      if (cnt[j] == 1)
        c1++;
      else if (cnt[j] >= 2)
        c2++;
    for (int i = (0), LIM = (c1); i <= LIM; i++)
      A[i] = 1ll * fac[c1] * invf[i] % 998244353 * invf[c1 - i] % 998244353 *
             Pow(2, i) % 998244353;
    for (int i = (0), LIM = (c2 * 2); i <= LIM; i++)
      B[i] = 1ll * fac[2 * c2] * invf[i] % 998244353 * invf[2 * c2 - i] %
             998244353;
    Mul(A, B, C[i], c1, 2 * c2);
  }
  int q;
  scanf("%d", &q);
  for (int Q; q--;) {
    scanf("%d", &Q);
    Q /= 2;
    int ans = 0;
    for (int i = 1; i <= K; i++) {
      int t = Q - b[i] - 1;
      if (t >= 0) ans = (ans + C[i][t]) % 998244353;
    }
    printf("%d\n", (ans + 998244353) % 998244353);
  }
}
