# include <bits/stdc++.h>
# define int long long
# define up(i ,x ,y) for (int i = x ; i <= y; i ++)
# define dn(i ,x ,y) for (int i = x ; i >= y ;i --)
# define inf 1e18
using namespace std;
inline int read(){int s = 0 , w = 0;char c = getchar();while(!isdigit(c)){w |= (c == '-');c = getchar();}while(isdigit(c)){s = (s << 1) + (s << 3) + (c ^ 48);c = getchar();}return w ? -s : s;}
inline void write(int x){if(x < 0) putchar('-') , x = -x;if(x > 9) write(x / 10);putchar(x % 10 | 48);}
inline void writesp(int x){write(x) , putchar(' ');}
inline void writeln(int x){write(x) , putchar('\n');}
const int N = 1005 ,base = 233 ,mod = 998244353 ,base1 = 131 ,mod1 = 1e9 + 7;
int n ,m ,A ,B;
int pw[N] ,pw1[N] ,b[N] ,ma[N][N] ,ha[N] ,has[N][N];
char a[N][N];
map <int ,bool> vis;
signed main(){
n = read () ,m = read () ,A = read () ,B = read ();
pw[0] = pw1[0] = 1;
up (i ,1 ,1000) pw[i] = pw[i - 1] * base % mod;
up (i ,1 ,n) {
up (j ,1 ,m) cin >> a[i][j];
up (j ,1 ,m) ha[i] = (ha[i] * base + a[i][j]) % mod;
up (j ,1 ,m) {
int k = j + B - 1;
has[i][j] = (ha[k] - ha[j - 1] * pw[B] % mod + mod) % mod;
}
}
up (j ,1 ,m - B + 1) {
int k = j + B - 1;
up (i ,1 ,n) b[i] = has[i][j];
ha[0] = 1;
up (i ,1 ,n) ha[i] = (ha[i - 1] * base1 % mod1 + b[i]) % mod1;
up (i ,1 ,n - A + 1) {
int dn = i + A - 1;
int HASH = (ha[dn] - ha[i - 1] * base1 % mod1 + mod1) % mod1;
vis[HASH] = 1;
}
}
int Q = read ();
while (Q --) {
int HASHMA = 0;
up (i ,1 ,A) {
int hashma = 0;
up (j ,1 ,B) {
char x;
cin >> x;
hashma = (hashma * base % mod + x) % mod;
} HASHMA = (HASHMA * base1 % mod1 + hashma) % mod1;
} puts (vis[HASHMA] ? "1" : "0");
}
return 0;
}