#include <bits/stdc++.h>
using namespace std;
mt19937 rang(chrono::high_resolution_clock::now().time_since_epoch().count());
const long double PI = 3.141592653589793;
const long long INF = 9223372036854775807ll;
const int N = 3e5 + 2;
const long long mod = 998244353;
const long long g = 3;
const long long root_pw = (1 << 20);
const long long root = 565042129;
const long long root_1 = 950391366;
long long modinv(long long x) {
  long long ans = 1, ex = mod - 2;
  while (ex > 0) {
    if (ex & 1ll) {
      ans = (ans * x) % mod;
    }
    ex >>= 1ll;
    x = (x * x) % mod;
  }
  return ans;
}
void ntt(vector<long long> &a, bool invert) {
  int n = a.size();
  for (int i = 1, j = 0; i < n; i++) {
    int bit = n >> 1;
    for (; j & bit; bit >>= 1) j ^= bit;
    j ^= bit;
    if (i < j) swap(a[i], a[j]);
  }
  for (int len = 2; len <= n; len <<= 1) {
    long long wlen = invert ? root_1 : root;
    for (int i = len; i < root_pw; i <<= 1) wlen = (wlen * wlen) % mod;
    for (int i = 0; i < n; i += len) {
      long long w = 1;
      for (int j = 0; j < len / 2; j++) {
        long long u = a[i + j], v = (a[i + j + len / 2] * w) % mod;
        a[i + j] = u + v < mod ? u + v : u + v - mod;
        a[i + j + len / 2] = u - v >= 0 ? u - v : u - v + mod;
        w = (w * wlen) % mod;
      }
    }
  }
  if (invert) {
    int n_1 = modinv(n);
    for (long long &x : a) x = (x * n_1) % mod;
  }
}
vector<long long> multiply(vector<long long> &a, vector<long long> &b) {
  vector<long long> fa(a.begin(), a.end()), fb(b.begin(), b.end());
  long long n = 1;
  while (n < max(a.size(), b.size())) n <<= 1;
  n <<= 1;
  fa.resize(n), fb.resize(n);
  ntt(fa, false), ntt(fb, false);
  for (int i = 0; i < n; ++i) {
    fa[i] *= fb[i];
    fa[i] %= mod;
  }
  ntt(fa, true);
  vector<long long> res(n);
  for (int i = 0; i < n; ++i) {
    res[i] = fa[i];
  }
  return res;
}
vector<long long> fact(N);
vector<long long> p2(N);
long long C(long long n, long long r) {
  long long res = fact[n];
  res *= modinv(fact[r]);
  res %= mod;
  res *= modinv(fact[n - r]);
  return (res % mod);
}
void solve() {
  fact[0] = 1;
  p2[0] = 1;
  for (int i = 1; i < N; ++i) {
    fact[i] = (fact[i - 1] * i) % mod;
    p2[i] = (p2[i - 1] * 2) % mod;
  }
  int n, k;
  cin >> n >> k;
  vector<long long> freq(N, 0);
  vector<int> wh(n), rd(k);
  for (int i = 0; i < n; ++i) {
    cin >> wh[i];
    freq[wh[i]]++;
  }
  for (int i = 0; i < k; ++i) cin >> rd[i];
  int q;
  cin >> q;
  vector<int> Q(q);
  for (int i = 0; i < q; ++i) cin >> Q[i];
  vector<long long> ans(q);
  for (int r : rd) {
    long long dub = 0, sin = 0;
    for (int i = 1; i < r; ++i) {
      if (freq[i] == 1) sin++;
      if (freq[i] > 1) dub++;
    }
    dub *= 2;
    vector<long long> polya(dub + 1);
    vector<long long> polyb(sin + 1);
    for (int i = 0; i <= dub; ++i) {
      polya[i] = C(dub, i);
    }
    for (int i = 0; i <= sin; ++i) {
      polyb[i] = (C(sin, i) * p2[i]) % mod;
    }
    vector<long long> polyc = multiply(polya, polyb);
    for (int i = 0; i < q; ++i) {
      int use = Q[i] / 2 - r - 1;
      if (use >= 0 && use < polyc.size()) {
        ans[i] += polyc[use];
        ans[i] %= mod;
      }
    }
  }
  for (auto pr : ans) cout << pr << '\n';
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  srand(chrono::high_resolution_clock::now().time_since_epoch().count());
  solve();
  return 0;
}
