#include <bits/stdc++.h>
using namespace std;
int n, k, q, cnt[300007], f[1500007], g[1500007], res[1500007], lim, len,
    r[1500007], fac[600007], inv[600007];
int read() {
  int num = 0;
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  while (c >= '0' && c <= '9') num = num * 10 + c - '0', c = getchar();
  return num;
}
int precalc(int x) {
  lim = 1, len = 0;
  while (lim <= x) lim *= 2, len++;
  for (int i = 0; i < lim; i++)
    r[i] = (r[i >> 1] >> 1) | ((i & 1) << (len - 1));
  return 0;
}
int fpow(int a, int x) {
  int res = 1;
  while (x) {
    if (x & 1) res = 1LL * res * a % 998244353;
    a = 1LL * a * a % 998244353;
    x >>= 1;
  }
  return res;
}
int ntt(int* a, int is) {
  for (int i = 0; i < lim; i++)
    if (i < r[i]) swap(a[i], a[r[i]]);
  for (int i = 2; i <= lim; i *= 2) {
    int mid = i / 2, wn = fpow(3, (998244353 - 1) / i);
    if (is == -1) wn = fpow(wn, 998244353 - 2);
    for (int j = 0; j < lim; j += i)
      for (int k = 0, w = 1; k < mid; k++, w = 1LL * w * wn % 998244353) {
        int t = 1LL * w * a[j + k + mid] % 998244353;
        a[j + k + mid] = (a[j + k] - t + 998244353) % 998244353;
        a[j + k] = (a[j + k] + t) % 998244353;
      }
  }
  if (is == -1)
    for (int i = 0, v = fpow(lim, 998244353 - 2); i < lim; i++)
      a[i] = 1LL * a[i] * v % 998244353;
  return 0;
}
int c(int a, int b) {
  if (a < b)
    return 0;
  else
    return 1LL * fac[a] * inv[b] % 998244353 * inv[a - b] % 998244353;
}
int main() {
  n = read();
  k = read();
  precalc(2 * n);
  for (int i = 1; i <= n; i++) cnt[read()]++;
  fac[0] = fac[1] = inv[0] = inv[1] = 1;
  for (int i = 2; i <= 2 * n; i++) fac[i] = 1LL * fac[i - 1] * i % 998244353;
  for (int i = 2; i <= 2 * n; i++)
    inv[i] = 1LL * (998244353 - 998244353 / i) * inv[998244353 % i] % 998244353;
  for (int i = 2; i <= 2 * n; i++)
    inv[i] = 1LL * inv[i - 1] * inv[i] % 998244353;
  for (int l = 1; l <= k; l++) {
    int v = read(), cnt1 = 0, cnt2 = 0;
    for (int i = 1; i < v; i++)
      if (cnt[i] >= 2)
        cnt2++;
      else if (cnt[i] >= 1)
        cnt1++;
    for (int i = 0; i < lim; i++) {
      f[i] = 1LL * c(cnt1, i) * fpow(2, i) % 998244353;
      g[i] = c(2 * cnt2, i);
    }
    ntt(f, 1), ntt(g, 1);
    for (int i = 0; i < lim; i++) f[i] = 1LL * f[i] * g[i] % 998244353;
    ntt(f, -1);
    for (int i = 0; i <= n; i++)
      res[v + i + 1] = (res[v + i + 1] + f[i]) % 998244353;
  }
  q = read();
  for (int i = 1; i <= q; i++) printf("%d\n", res[read() / 2]);
  return 0;
}
