#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define BET(a,b,c) ((a)<=(b)&&(b)<(c)) #define FOR(i,n) for(int i=0,i##_end=(int(n));i VI; typedef vector VVI; const long double PI = 4.0*atan(1.0); typedef complex Complex; const Complex I(0, 1); template void fft(int n, double theta, vector& a) { for (int m = n; m >= 2; m >>= 1) { int mh = m >> 1; for (int i = 0; i < mh; i++) { Complex w = exp(i*theta*I); for (int j = i; j < n; j += m) { int k = j + mh; Complex x = a[j] - a[k]; a[j] += a[k]; a[k] = w * x; } } theta *= 2; } int i = 0; for (int j = 1; j < n - 1; j++) { for (int k = n >> 1; k > (i ^= k); k >>= 1); if (j < i) swap(a[i], a[j]); } } // result[i] = sum a[x] * b[y] where x + y == i template vector comvolution(const vector &a, const vector &b){ vector result; vector fa(a.begin(), a.end()); vector fb(b.begin(), b.end()); //while(SZ(fa) && fa.back().real() == 0.0) fa.pop_back(); //while(SZ(fb) && fb.back().real() == 0.0) fb.pop_back(); int n = 1; while(n < SZ(fa) + SZ(fb)) n <<= 1; fa.resize(n); fb.resize(n); fft(n, 2 * PI / n, fa); fft(n, 2 * PI / n, fb); FOR(i,n) fa[i] *= fb[i]; fft(n, -2 * PI / n, fa); FOR(i,n) result.push_back(round(fa[i].real()/n)); return result; } int main() { int L,M,N; cin>>L>>M>>N; VI A(L); VI B(M); FOR(i,L) scanf("%d",&A[i]); FOR(i,M) scanf("%d",&B[i]); int Q; cin>>Q; VI AH(N + 1); VI BH(N + 1); FOR(i,L) AH[A[i]]++; FOR(i,M) BH[B[i]]++; reverse(ALL(BH)); auto r = comvolution(AH, BH); FOR(i,Q){ printf("%lld\n", r[i+N]); } return 0; }