#include <bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
using namespace std;
const long long mod = 998244353;
int n, k, m, a[2000005], b[2000005], w[2000005], v[2000005];
int jc[2000005], inv[2000005], cnt[2000005], maxx, ans[2000005];
int read() {
  int x = 0, f = 1;
  char c = getchar();
  while (c > '9' || c < '0') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = (x << 3) + (x << 1) + c - '0';
    c = getchar();
  }
  return x * f;
}
int ksm(int a, int b) {
  int s = 1;
  while (b) {
    if (b & 1) s = 1ll * s * a % mod;
    a = 1ll * a * a % mod;
    b >>= 1;
  }
  return s;
}
long long Mod(long long x) { return x >= mod ? x - mod : x; }
int rev(int n) {
  int mi = ceil(log2(n));
  n = 1 << mi;
  for (int i = 0; i < n; i++) v[i] = v[i >> 1] >> 1 | ((i & 1) << (mi - 1));
  return n;
}
void NTT(int a[], int n, int bj) {
  for (int i = 0; i < n; i++)
    if (v[i] > i) swap(a[i], a[v[i]]);
  for (int i = 1; i < n; i <<= 1) {
    int wn = ksm(3, mod - 1 + bj * (mod - 1) / (i << 1));
    w[0] = 1;
    for (int j = 1; j < i; j++) w[j] = 1ll * w[j - 1] * wn % mod;
    for (int j = 0; j < n; j += i << 1) {
      for (int k = 0; k < i; k++) {
        int tx = a[j + k];
        int ty = 1ll * a[j + k + i] * w[k] % mod;
        a[j + k] = Mod(tx + ty);
        a[j + k + i] = Mod(tx - ty + mod);
      }
    }
  }
  if (bj == -1) {
    int ny = ksm(n, mod - 2);
    for (int i = 0; i < n; i++) a[i] = 1ll * a[i] * ny % mod;
  }
}
int C(int n, int m) {
  if (n < m) return 0;
  if (n == m) return 1;
  return 1ll * jc[n] * inv[m] % mod * 1ll * inv[n - m] % mod;
}
int main() {
  n = read();
  k = read();
  jc[0] = inv[0] = 1;
  for (int i = 1; i <= 2 * n; i++) jc[i] = 1ll * jc[i - 1] * i % mod;
  for (int i = 1; i <= 2 * n; i++) inv[i] = ksm(jc[i], mod - 2);
  for (int i = 1; i <= n; i++) {
    int xx = read();
    cnt[xx]++;
  }
  n = rev(n << 1);
  for (int i = 1; i <= k; i++) {
    int B = read();
    int x = 0, y = 0;
    for (int j = 1; j < B; j++) {
      if (cnt[j] > 1) y++;
      if (cnt[j] == 1) x++;
    }
    for (int j = 0; j < n; j++) {
      a[j] = 1ll * C(x, j) * ksm(2, j) % mod;
      b[j] = C(2 * y, j);
    }
    NTT(a, n, 1);
    NTT(b, n, 1);
    for (int j = 0; j < n; j++) a[j] = 1ll * a[j] * b[j] % mod;
    NTT(a, n, -1);
    for (int j = 0; j < n; j++) ans[j + B] = (ans[j + B] + a[j]) % mod;
  }
  int q = read();
  for (int i = 1; i <= q; i++) {
    int xx = read();
    xx = xx / 2 - 1;
    printf("%d\n", ans[xx]);
  }
  return 0;
}
