#include using namespace std; typedef long long ll; vector> fft(vector> a, bool inverse = 0) { int n = a.size(); int h = (int)log2(n); for (int i = 0; i < n; i++) { int j = 0; for (int k = 0; k < h; k++) j |= (i >> k & 1) << (h - 1 - k); if (i < j) swap(a[i], a[j]); } for (int b = 1; b < n; b *= 2) { for (int j = 0; j < b; j++) { complex w = polar(1.0, (2 * M_PI) / (2 * b) * j * (inverse ? 1 : -1)); for (int k = 0; k < n; k += b * 2) { complex s = a[j + k]; complex t = a[j + k + b] * w; a[j + k] = s + t; a[j + k + b] = s - t; } } } if (inverse) for (int i = 0; i < n; i++) a[i] /= n; return a; } vector> ifft(vector> &a) { return fft(a, 1); } vector> fft(vector a, bool inverse = 0) { vector> a_complex(a.size()); for (int i = 0; i < a.size(); i++) a_complex[i] = complex(a[i], 0); return fft(a_complex, inverse); } vector> ifft(vector a) { vector> a_complex(a.size()); for (int i = 0; i < a.size(); i++) a_complex[i] = complex(a[i], 0); return fft(a_complex, 1); } // 畳み込み : return v | v[k] = sum_{0<=j<=k}(a[j]b[k-j]) vector convolve(vector a, vector b) { int s = a.size() + b.size() - 1; int t = 1; while (t < s) t *= 2; a.resize(t); b.resize(t); vector> A = fft(a); vector> B = fft(b); for (int i = 0; i < t; i++) { A[i] *= B[i]; } A = ifft(A); for (int i = 0; i < A.size(); i++) a[i] = A[i].real(); return a; } int main() { int l, m, n, q; cin >> l >> m >> n; vector A(n + 1), B(n + 1); for (int i = 0; i < l; i++) { int x; cin >> x; A[x]++; } for (int i = 0; i < m; i++) { int x; cin >> x; B[n - x]++; } cin >> q; vector ans = convolve(A, B); for (int i = 0; i < q; i++) { cout << (int)(ans[i + n] + 0.5) << endl; } return 0; }