#include <bits/stdc++.h>
using namespace std;
int read() {
  int x = 0, sgn = 1;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') sgn = -1;
  for (; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + (ch ^ 48);
  return x * sgn;
}
const int N = 2e6 + 10;
const int mod = 998244353;
int A[N << 2], B[N << 2], n, k, fac[N], ifac[N], ans[N], rev[N], len,
    Wn[N << 2], q, cnt[N], b[10], p2[N], Q[N];
long long qp(long long x, int t) {
  long long res = 1;
  for (; t; t >>= 1, x = x * x % mod)
    if (t & 1) res = res * x % mod;
  return res;
}
long long C(int x, int y) {
  if (x < 0 || y < 0 || x < y) return 0;
  return 1ll * fac[x] * ifac[y] % mod * ifac[x - y] % mod;
}
void init_NTT(int l) {
  for (len = 1; len <= 2 * l; len <<= 1)
    ;
  for (int i = 1; i < len; i++)
    rev[i] = rev[i >> 1] >> 1 | (i & 1 ? len >> 1 : 0);
}
void init(int l) {
  for (int i = (fac[0] = 1); i <= l; i++) fac[i] = 1ll * fac[i - 1] * i % mod;
  ifac[l] = qp(fac[l], mod - 2);
  for (int i = l - 1; i >= 0; i--) ifac[i] = 1ll * ifac[i + 1] * (i + 1) % mod;
  for (int i = (p2[0] = 1); i <= l; i++) p2[i] = p2[i - 1] * 2ll % mod;
}
void NTT(int *f, int on = 1) {
  for (int i = 1; i < len; i++)
    if (i < rev[i]) swap(f[i], f[rev[i]]);
  for (int h = 2; h <= len; h <<= 1) {
    int wn = Wn[h];
    for (int i = 0; i < len; i += h) {
      int ww = 1;
      for (int k = i; k < i + h / 2; k++) {
        int u = f[k], v = 1ll * f[k + h / 2] * ww % mod;
        ww = 1ll * ww * wn % mod;
        f[k] = (u + v) % mod, f[k + h / 2] = (u - v + mod) % mod;
      }
    }
  }
  if (on == -1) {
    reverse(f + 1, f + len);
    int invv = qp(len, mod - 2);
    for (int i = 0; i < len; i++) f[i] = 1ll * f[i] * invv % mod;
  }
}
void solve(int lim) {
  int c1 = 0, c2 = 0;
  for (int i = 1; i < lim; i++)
    if (cnt[i] == 1)
      c1++;
    else if (cnt[i] >= 2)
      c2++;
  init_NTT(c1 + c2 * 2);
  for (int i = 0; i < len; i++) A[i] = B[i] = 0;
  for (int i = 0; i <= c1; i++) A[i] = C(c1, i) * p2[i] % mod;
  for (int i = 0; i <= c2 * 2; i++) B[i] = C(c2 * 2, i);
  NTT(A);
  NTT(B);
  for (int i = 0; i < len; i++) A[i] = 1ll * A[i] * B[i] % mod;
  NTT(A, -1);
  for (int i = 1; i <= q; i++)
    if (Q[i] >= lim) ans[i] = (ans[i] + A[Q[i] - lim]) % mod;
}
int main() {
  n = read(), k = read();
  init(N - 10);
  for (int h = 1; h < N << 2; h <<= 1) Wn[h] = qp(3, (mod - 1) / h);
  for (int i = 1; i <= n; i++) cnt[read()]++;
  for (int i = 1; i <= k; i++) b[i] = read();
  q = read();
  for (int i = 1; i <= q; i++) Q[i] = (read() / 2) - 1;
  sort(b + 1, b + k + 1);
  for (int i = 1; i <= k; i++) solve(b[i]);
  for (int i = 1; i <= q; i++) printf("%d\n", ans[i]);
  return 0;
}
