#include #define rep(i,n) for(int i = 0; i < (n); i++) using namespace std; typedef long long ll; vector> fft(vector> f, int inv = 0){ int n = f.size(); if(n == 1) return f; vector> f_e, f_o; for(int i = 0; i < n; i++){ if(i % 2 == 0) f_e.push_back(f[i]); else f_o.push_back(f[i]); } vector> F_e = fft(f_e, inv), F_o = fft(f_o, inv); vector> ret; for(int i = 0; i < n; i++){ complex zeta = exp(i * 2 * M_PI / (double)n * complex{0, 1.0} * (double)(inv ? -1 : +1)); int j = i % (n / 2); ret.push_back(F_e[j] + zeta * F_o[j]); } return ret; } vector> change(vector> f){ int n = 1; while(n < f.size()) n <<= 1; while(f.size() < n) f.push_back(complex{0, 0}); return f; } template vector convolution(vector a, vector b){ int N = a.size(); vector> A, B; for(int i = 0; i < N; i++){ A.push_back(complex{(double)a[i], 0}); B.push_back(complex{(double)b[i], 0}); } for(int i = 0; i < N; i++){ A.push_back(complex{0, 0}); B.push_back(complex{0, 0}); } A = change(A); B = change(B); A = fft(A); B = fft(B); vector> C; for(int i = 0; i < A.size(); i++) C.push_back(A[i] * B[i]); C = fft(C, 1); vector c; c.push_back(0); for(int i = 0; i < 2 * N - 1; i++){ c.push_back((T)(C[i].real() / (double)C.size() + 0.5)); } return c; } int main(){ cin.tie(0); ios::sync_with_stdio(0); int L,M,N; cin >> L >> M >> N; vector A(N),B(N); rep(i,L){ int a; cin >> a; A[a - 1] = 1; } rep(i,M){ int b; cin >> b; B[N - 1 - (b - 1)] = 1; } vector C = convolution(A, B); int Q; cin >> Q; rep(i,Q) printf("%d\n", C[N + i]); }