#include<bits/stdc++.h>
using namespace std;
int m,n,a,b,qu,t,t1;
unsigned long long bs=1333331,pw[1001],f[1001][1001],q[1000001],f1[1001][1001],pw1[1001],bs1=131,q1[1000001];
string s;
int mp[1001][1001];
inline int gl(int l,int s,int e){
return f[l][e]-f[l][s-1]*pw[e-s+1];
}
inline int gl1(int l,int s,int e){
return f1[l][e]-f1[l][s-1]*pw1[e-s+1];
}
inline bool find(unsigned long long nm){
int l=0,r=t,mid;
while(l<r){
mid=(l+r)/2;
if(q[mid]<nm) l=mid+1;
else if(q[mid]==nm) return 1;
else r=mid;
}
return q[r]==nm;
}
inline bool find1(unsigned long long nm){
int l=0,r=t,mid;
while(l<r){
mid=(l+r)/2;
if(q1[mid]<nm) l=mid+1;
else if(q1[mid]==nm) return 1;
else r=mid;
}
return q1[r]==nm;
}
int main(){
cin>>m>>n>>a>>b;
for(int i=1;i<=m;++i){
cin>>s;
for(int j=0;j<s.size();++j) mp[i][j+1]=s[j]-'0';
}
pw[0]=1,pw1[0]=1;
for(int i=1;i<=1001;++i) pw[i]=pw[i-1]*bs,pw1[i]=pw1[i-1]*bs1;
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j) f[i][j]=f[i][j-1]*bs+mp[i][j],f1[i][j]=f1[i][j-1]*bs1+mp[i][j];
for(int i=1;i<=m-a+1;++i)
for(int j=1;j<=n-b+1;++j){
t++,t1++;
for(int k=i;k<i+a;++k) q[t]=q[t]*bs+gl(k,j,j+b-1),q1[t1]=q1[t1]*bs1+gl1(k,j,j+b-1);
}
cin>>qu;
sort(q+1,q+t+1),sort(q1+1,q1+t1+1);
while(qu--){
unsigned long long tmp=0,tmp1=0;
for(int i=1;i<=a;++i){
cin>>s;
for(int j=0;j<s.size();++j) mp[i][j+1]=s[j]-'0';
}
for(int i=1;i<=a;++i)
for(int j=1;j<=b;++j) f[i][j]=f[i][j-1]*bs+mp[i][j],f1[i][j]=f1[i][j-1]*bs1+mp[i][j];
for(int i=1;i<=a;++i) tmp=tmp*bs+gl(i,1,b),tmp1=tmp1*bs1+gl1(i,1,b);
cout<<(find(tmp)&find1(tmp1))<<endl;
}
return 0;
}
/kk