#include <bits/stdc++.h>

using namespace std;

typedef unsigned long long ULL;

char a[2010][2010];
char b[2010][2010];

const int p1 = 9875321;
const int p2 = 1e9 + 7;

ULL f[2010][2010];
ULL g[2010][2010];

ULL POW(ULL a, ULL b)
{
	ULL res = 1;
	while (b) {
		if (b & 1) res = res * a;
		a *= a;
		b >>= 1;
	}
	return res;
}

int main()
{
	int x0, y0, x1, y1;
	while (scanf("%d%d%d%d", &x0, &y0, &x1, &y1) != EOF) {
		memset(f, 0, sizeof(f));
		memset(g, 0, sizeof(g));
		for (int i = 1; i <= x0; i++) {
			scanf("%s", a[i] + 1);
			for (int j = 1; j <= y0; j++) {
				f[i][j] = (a[i][j] == 'o') + f[i - 1][j] * p1 + f[i][j - 1] * p2 - f[i - 1][j - 1] * p1 * p2;
			}
		}
		for (int i = 1; i <= x1; i++) {
			scanf("%s", b[i] + 1);
			for (int j = 1; j <= y1; j++) {
				g[i][j] = (b[i][j] == 'o') + g[i - 1][j] * p1 + g[i][j - 1] * p2 - g[i - 1][j - 1] * p1 * p2;
			}
		}
		
		ULL down = POW(p1, x0);
		ULL right = POW(p2, y0);
		int ans = 0;
		for (int i = 1; i + x0 - 1 <= x1; i++) {
			for (int j = 1; j + y0 - 1 <= y1; j++) {
				int tx = i + x0 - 1;
				int ty = j + y0 - 1;
				ULL delta = g[tx][ty] - g[i - 1][ty] * down - g[tx][j - 1] * right + g[i - 1][j - 1] * down * right;
				ans += (f[x0][y0] == delta);
			}
		}
		printf("%d\n", ans);
	}
	return 0;
}

