constint N = 1010; constint M = N * N; const ull P = 131;
int n, m, a, b, k; ull h[N][N], p[M];
ull Hash(ull f[], int l, int r) { return f[r] - f[l - 1] * p[r - l + 1]; }
intmain() { scanf("%d%d%d%d", &n, &m, &a, &b); p[0] = 1; for (int i = 1; i <= n * m; i++) p[i] = p[i - 1] * P; for (int i = 1; i <= n; i++) { char s[N]; scanf("%s", s + 1); for (int j = 1; j <= m; j++) h[i][j] = h[i][j - 1] * P + s[j] - '0'; } set<ull> st; for (int i = b; i <= m; i++) { ull t = 0; int l = i - b + 1, r = i; for (int j = 1; j <= n; j++) { t = t * p[b] + Hash(h[j], l, r); if (j > a) t -= Hash(h[j - a], l, r) * p[a * b]; if (j >= a) st.insert(t); } } scanf("%d", &k); while (k--) { ull t = 0; char s[N]; for (int i = 1; i <= a; i++) { scanf("%s", s + 1); for (int j = 1; j <= b; j++) t = t * P + s[j] - '0'; } if (st.count(t)) printf("1\n"); elseprintf("0\n"); } return0; }