rt,RE
#include<bits/stdc++.h>
using namespace std;
#define nfor for(int i=1;i<=n;i++)
#define ll long long
const int N=5e5+5;
int T,n,m;
ll a[N],b[N],k,l;
int tree[N<<1][2],cnt,contr[N<<1];
inline void add(ll t1,ll t2){
int root=0;
for(int i=30;i>=0;i--){
if((t1&(1<<i))>>i==0 && (t2&(1<<i))>>i==0 ){
if(!tree[root][0]) tree[root][0]=++cnt;
if(i==0) contr[tree[root][0]]++;
root=tree[root][0];
}
else if( (t1&(1<<i))>>i==1 && (t2&(1<<i))>>i==0 ){
if(!tree[root][1]) tree[root][1]=++cnt;
if(i==0) contr[tree[root][1]]++;
root=tree[root][1];
}
else if( (t1&(1<<i))>>i==0 && (t2&(1<<i))>>i==1 ){
if(!tree[root][0]) tree[root][0]=++cnt;
contr[tree[root][0]]++;
if(!tree[root][1]) tree[root][1]=++cnt;
if(i==0) contr[tree[root][1]]++;
root=tree[root][1];
}
else{
if(!tree[root][1]) tree[root][1]=++cnt;
contr[tree[root][1]]++;
if(!tree[root][0]) tree[root][0]=++cnt;
if(i==0) contr[tree[root][0]]++;
root=tree[root][0];
}
}
return ;
}
inline int query(ll num){
int root=0,res=0;
for(int i=30;i>=0;i--){
ll id=(num&(1<<i))>>i;
if(!tree[root][id]) return res;
res+=contr[tree[root][id]];
root=tree[root][id];
}
return res;
}
int main(){
scanf("%d%d%d",&T,&n,&m);
nfor scanf("%lld",&a[i]);
nfor scanf("%lld",&b[i]);
nfor add(a[i],b[i]);
while(m--){
scanf("%lld",&k);
k=k^(l*T);
l=query(k);
printf("%d\n",l);
}
return 0;
}