#include <bits/stdc++.h>
using namespace std;
bool maps[1005][1005];
struct point {
	int x=0,y=0;
} po[1005][1005];
void init(int n,int m) {
	for(int i=0; i<=n+1; i++) {
		maps[i][0]=1,maps[i][m+1]=1;
	}
	for(int i=0; i<=m+1; i++) {
		maps[0][i]=1,maps[n+1][i]=1;
	}
	//debug
	/*
	for(int i=0;i<=n+1;i++){
	    for(int j=0;j<=m+1;j++){
	        cout << maps[i][j];
	    }
	    cout << endl;
	}
	*/
	//debug
}
void makex(int x1,int x2,int cnt,int cross) {
	for(int i=x1; i<x2; i++) {
		po[i][cross].x=cnt-(i-x1);
	}
}
void makey(int y1,int y2,int cnt,int line) {
	for(int i=y1; i<y2; i++) {
		po[line][i].y=cnt-(i-y1);
	}
}
int main() {
        freopen("plant.in","r",stdin);
        freopen("plant.out","w",stdout);
	int t,id;
	cin >> t >> id;
	int n,m,c,f;
	cin >> n >> m >> c >> f;
	init(n,m);
	while(t--) {
		for(int i=1; i<=n; i++) {
			for(int j=1; j<=m; j++) {
				char c;
				cin >> c;
				maps[i][j]=c-'0';
			}
		}
		//record line
		int start=0;
		for(int i=1; i<=n+1;i++) {
			start=1;
			int j=1,cnt=0;
			while(j<=m+1) {
				if(maps[i][j]==1) {
					makey(start,j,cnt,i);
					start=j+1,cnt=0,j+=1;
					continue;
				}
				
				cnt++,j++;
			}
		}
		//record cross
		for(int i=1; i<=m+1; i++) {
			int j=1,cnt=0;
			start=1;
			while(j<=n+1) {
				if(maps[j][i]==1) {
					makex(start,j,cnt,i);
					start=j+1,cnt=0,j+=1;
					continue;
				}
				cnt++,j++;
			}
		}
		//debug
//		for(int i=1; i<=n; i++) {
//			for(int j=1; j<=m; j++) {
//				cout << "(" << po[i][j].x << "," << po[i][j].y << ")" << " ";
//			}
//			cout << endl;
//		}
		//debug
		long long cntc=0,cntf=0;
		for(int i=1; i<=n; i++) {
			for(int j=1; j<=m; j++) {
				if(po[i][j].x>=3&&po[i][j].y>=2) {
					long long y1=po[i][j].y-1;
					for(int k=i+2; k<=i+po[i][j].x-1; k++) {
						if(po[k][j].y>=2) {
							cntc+=y1*(po[k][j].y-1);
							cntf+=y1*(po[k][j].y-1)*(po[k][j].x-1);
						}
					}
				}
			}
		}
		cout << cntc << " " << cntf;
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}
