#include <bits/stdc++.h>
const int LOG = 18, MAX = 1e5, LIM = MAX * 2, LEN = 1 << LOG;
int cnt[MAX];
std::complex<double> num[LEN / 2];
template <class T>
void print(const std::vector<T> &a) {
  std::cout << "print:";
  for (T x : a) std::cout << ' ' << x;
  std::cout << std::endl;
}
void precalc() {
  const double PI = acos(-1);
  for (int i = 0; i < LEN; i += 2) {
    double x = PI / LEN * i;
    num[i / 2] = std::complex<double>(cos(x), sin(x));
  }
}
std::vector<int> join(const std::vector<int> &a) {
  std::vector<int> res(a.size() - 1);
  for (int i = 1; i < a.size(); ++i) res[i - 1] = std::min(a[i - 1], a[i]);
  return res;
}
std::vector<std::complex<double> > sz(const std::vector<int> &a) {
  std::vector<std::complex<double> > res(LEN);
  for (int x : a) res[x] += 1.0;
  return res;
}
std::vector<std::complex<double> > bitRev(
    const std::vector<std::complex<double> > &a) {
  std::vector<std::complex<double> > res(LEN);
  for (int i = 0; i < LEN; ++i) {
    int tmp = i, id = 0;
    for (int i = 0; i < LOG; ++i) {
      id = id * 2 + tmp % 2;
      tmp /= 2;
    }
    res[id] = a[i];
  }
  return res;
}
std::vector<std::complex<double> > fft(
    const std::vector<std::complex<double> > &a) {
  std::vector<std::complex<double> > res = bitRev(a);
  for (int i = 2; i <= LEN; i *= 2) {
    for (int j = 0; j < LEN; j += i) {
      int x = j, y = j + i / 2, z = 0;
      for (int k = 0; k < i / 2; ++k) {
        res[y] = res[x] - res[y] * num[z];
        res[x] = res[x] * 2.0 - res[y];
        ++x, ++y, z += LEN / i;
      }
    }
  }
  return res;
}
std::vector<std::complex<double> > mul(
    const std::vector<std::complex<double> > &a,
    const std::vector<std::complex<double> > &b) {
  std::vector<std::complex<double> > res(LEN);
  for (int i = 0; i < LEN; ++i) res[i] = a[i] * b[i];
  std::reverse(res.begin() + 1, res.end());
  res = fft(res);
  for (int i = 0; i < LEN; ++i) res[i] /= LEN;
  return res;
}
std::vector<long long> calc(const std::vector<std::complex<double> > &a,
                            const std::vector<std::complex<double> > &b) {
  std::vector<std::complex<double> > c = mul(a, b);
  std::vector<long long> res(LIM);
  for (int i = 0; i < LIM; ++i) res[i] = (long long)round(c[i].real());
  return res;
}
std::vector<long long> solve(const std::vector<int> &a,
                             const std::vector<int> &b) {
  std::vector<int> c = join(a), d = join(b);
  std::vector<std::complex<double> > m = fft(sz(a)), n = fft(sz(b)),
                                     p = fft(sz(c)), q = fft(sz(d));
  std::vector<long long> w = calc(m, n), x = calc(m, q), y = calc(p, n),
                         z = calc(p, q);
  std::vector<long long> res(LIM);
  for (int i = 0; i < LIM; ++i) res[i] = w[i] - x[i] - y[i] + z[i];
  for (int i = 1; i < LIM; ++i) res[i] += res[i - 1];
  return res;
}
int main() {
  precalc();
  int n, m, q;
  scanf("%d%d%d", &n, &m, &q);
  std::vector<int> a(n), b(n), c(m), d(m);
  for (int i = 0; i < n; ++i) {
    int x;
    scanf("%d", &x);
    a[i] = x - 1;
    b[i] = MAX - x;
  }
  for (int i = 0; i < m; ++i) {
    int x;
    scanf("%d", &x);
    c[i] = x - 1;
    d[i] = MAX - x;
  }
  std::vector<long long> e = solve(a, c), f = solve(b, d);
  for (int i = 0; i < q; ++i) {
    int x;
    scanf("%d", &x);
    printf("%lld\n", f[LIM - x] - (x < 3 ? 0 : e[x - 3]));
  }
}
