#include using namespace std; #define ALL(x) begin(x),end(x) #define rep(i,n) for(int i=0;i<(n);i++) #define debug(v) cout<<#v<<":";for(auto x:v){cout<bool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b ostream &operator<<(ostream &os,const vector&v){ for(int i=0;i<(int)v.size();i++) os< istream &operator>>(istream &is,vector&v){ for(T &x:v)is>>x; return is; } namespace FastFourierTransform{ using real = long double; // 複素数型 struct C{ real x, y; C() : x(0), y(0) {} C(real x, real y) : x(x), y(y) {} inline C operator+(const C &c)const{ return C(x+c.x, y+c.y);} inline C operator-(const C &c)const{ return C(x-c.x, y-c.y);} inline C operator*(const C &c)const{ return C(x*c.x - y*c.y, x*c.y + y*c.x);} inline C conj() const{return C(x, -y);} }; const real PI=acosl(-1); int base=1; vector rts={{0, 0}, {1, 0}}; vector rev={0, 1}; //何してるか全然わからん void ensure_base(int nbase){ if(nbase<=base) return; rev.resize(1<>1]>>1)+((i&1)<<(nbase-1)); } while(base &a, int n){ assert((n&(n-1))==0);// nは2べきか int zeros = __builtin_ctz(n); ensure_base(zeros); int shift=base-zeros; for(int i=0;i>shift)) swap(a[i], a[rev[i]>>shift]); } //k:ブロックサイズの半分,nになったら終わりここがO(logn) for(int k=1;k multiply(const vector< int > &a, const vector< int > &b) { int need=(int)a.size()+(int)b.size()-1; int nbase=1;// fftするために2ベキのサイズに変更 while((1< fa(sz); for(int i=0;i> 1)), s(0, 1), t(0.5, 0); for(int i=0;i<=(sz>>1);i++) { int j=(sz-i)&(sz-1); C z=(fa[j]*fa[j]-(fa[i]*fa[i]).conj())*r;// conjは共役複素数を求める fa[j]=(fa[i]*fa[i]-(fa[j]*fa[j]).conj())*r;// c++の複素数型complexとかにもあるやつ fa[i]=z; } for(int i=0;i<(sz>>1);i++){ C A0=(fa[i]+fa[i+(sz>>1)])*t; C A1=(fa[i]-fa[i+(sz>>1)])*t*rts[(sz>>1)+i]; fa[i]=A0+A1*s; } fft(fa, sz >> 1); vector ret(need); for(int i=0;i>1].y : fa[i>>1].x); } return ret; } }; signed main(){ int N,M,S; cin>>N>>M>>S; vector A(S+1),B(S+1); rep(i,N){ int p;cin>>p; A[p]++; } rep(j,M){ int p;cin>>p; B[p]++; } reverse(ALL(B)); auto C=FastFourierTransform::multiply(A,B); int Q;cin>>Q; rep(i,Q) cout<