#include<bits/stdc++.h>
using namespace std;
string d[100010];
int n,m,k,a[100010],b[100010],c[100010],x[4],lg[100010];
int win(int x){
queue<int>q;
for(int i=1;i<=x;i++)q.push(i);
for(int r=1;q.size()>1;r++){
int t=q.size();
for(int j=1;j<=t/2;j++){
int aa=q.front();
q.pop();
int bb=q.front();
q.pop();
if(d[n-lg[x]+r][j-1]=='0')q.push((b[aa]>=r?aa:bb));
else q.push((b[bb]>=r?bb:aa));
}
}
return q.front();
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++)cin>>c[i];
for(int i=2;i<=n;i*=2)lg[i]=lg[i/2]+1;
while(1){
cin>>d[++k];
if(d[k].size()==1)break;
}
int q;
cin>>q;
while(q--){
cin>>x[0]>>x[1]>>x[2]>>x[3];
for(int i=1;i<=n;i++)b[i]=a[i]^x[i%4];
int ans=0;
for(int i=1;i<=m;i++){
ans^=(i*win(c[i]));
}
cout<<ans<<"\n";
}
return 0;
}