#include <bits/stdc++.h>
using namespace std;
const int N = 310000;
const long long mod = 998244353;
int n, k, m;
int a[N], b[N];
int q[N];
int nu[N];
const int maxn = 610000;
const long long P = 998244353;
const long long g = 3;
int na, nb;
long long x1[maxn], x2[maxn], W[2][maxn * 2], rev[maxn * 2];
long long inv[maxn];
long long f[maxn];
long long pow_mod(long long a, int b) {
  long long c = 1;
  for (; b; b >>= 1, a = a * a % P)
    if (b & 1) c = c * a % P;
  return c;
}
void NTT(long long* a, int f, int N) {
  for (int i = 0; i < N; i++)
    if (i < rev[i]) swap(a[i], a[rev[i]]);
  for (int i = 1; i < N; i <<= 1)
    for (int j = 0, t = N / (i << 1); j < N; j += i << 1)
      for (int k = 0, l = 0, x, y; k < i; k++, l += t)
        x = (long long)W[f][l] * a[j + k + i] % P, y = a[j + k],
        a[j + k] = (y + x) % P, a[j + k + i] = (y - x + P) % P;
  if (f)
    for (int i = 0, x = pow_mod(N, P - 2); i < N; i++)
      a[i] = (long long)a[i] * x % P;
}
void change(int N) {
  for (int i = 0; i < N; i++) {
    int x = i, y = 0;
    for (int k = 1; k < N; x >>= 1, k <<= 1) (y <<= 1) |= x & 1;
    rev[i] = y;
  }
}
void init(int N) {
  W[0][0] = W[1][0] = 1;
  for (int i = 1, x = pow_mod(g, (P - 1) / N), y = pow_mod(x, P - 2); i < N;
       i++)
    W[0][i] = (long long)x * W[0][i - 1] % P,
    W[1][i] = (long long)y * W[1][i - 1] % P;
  change(N);
}
long long pw2[maxn];
long long ans[N];
int main() {
  f[0] = inv[0] = pw2[0] = 1;
  for (int i = 1; i < maxn; i++)
    f[i] = (f[i - 1] * (long long)i) % mod, inv[i] = pow_mod(f[i], mod - 2),
    pw2[i] = (pw2[i - 1] * 2LL) % mod;
  scanf("%d %d", &n, &k);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), nu[a[i]]++;
  for (int i = 1; i < N; i++) nu[i] = min(nu[i], 2);
  for (int i = 1; i <= k; i++) scanf("%d", &b[i]);
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) scanf("%d", &q[i]);
  int len = 1;
  while (len < N) len *= 2;
  init(len);
  change(len);
  for (int i = 1; i <= k; i++) {
    int sum = 0, sum2 = 0;
    memset(x1, 0, sizeof(x1));
    memset(x2, 0, sizeof(x2));
    for (int j = 1; j < N; j++) {
      if (j >= b[i]) break;
      if (nu[j]) sum++;
      if (nu[j] == 2) sum2++;
    }
    sum -= sum2;
    for (int j = 1; j <= sum; j++) {
      x1[j] = f[sum] * inv[j] % mod;
      x1[j] = x1[j] * inv[sum - j] % mod;
      x1[j] = x1[j] * pw2[j] % mod;
    }
    for (int j = 1; j <= 2 * sum2; j++) {
      x2[j] = f[2 * sum2] * inv[j] % mod;
      x2[j] = x2[j] * inv[2 * sum2 - j] % mod;
    }
    x1[0] = x2[0] = 1;
    NTT(x1, 0, len);
    NTT(x2, 0, len);
    for (int j = 0; j < len; j++) x1[j] = x1[j] * x2[j] % mod;
    NTT(x1, 1, len);
    for (int j = 1; j <= m; j++) {
      int num = q[j] / 2 - b[i] - 1;
      if (num < 0) continue;
      ans[j] = (ans[j] + x1[num]) % mod;
    }
  }
  for (int j = 1; j <= m; j++) printf("%I64d\n", ans[j]);
  return 0;
}
