#include<bits/stdc++.h>
using namespace std;
int a[1005][1005],T,id,n,m,c,f;char b[1005][1005];long long ans1,ans2;
int cheak(int s,int x,int lie){
	if(a[s][lie+1]==1||a[x][lie+1]==1)return 0;
	int i=1,j=1;
	while(i+lie<=m&&!a[s][i+lie])i++;
	i--;
	while(j+lie<=m&&!a[x][j+lie])j++;
	j--;
	return i*j;
}
inline long long moder(long long &q){
	return q>=998244353?q-998244353:q;
}
void ck(int lie){
	ans1=0,ans2=0;
	for(int i=1;i<=n-2;i++){
		if(a[i][lie]==0&&a[i+1][lie]==0){
			int z;
			for(z=2;i+z<=n&&!a[i+z][lie];z++);
			for(int j=2;j<z;j++){
				int temp=cheak(i,i+j,lie);
				ans1+=temp;
				ans2+=temp*(z-1-j);
				ans1=moder(ans1);
				ans2=moder(ans2);
			}
		}
	}
}
int main(){
	freopen("plant.in","r",stdin);
	freopen("plant.out","w",stdout);
	scanf("%d%d",&T,&id);
	for(int ok=1;ok<=T;ok++){
		int ansc=0,ansf=0;
		scanf("%d%d%d%d",&n,&m,&c,&f);
		for(int i=1;i<=n;i++){
			scanf("%s",b[i]);	
		}
		for(int i=1;i<=n;i++){
			for(int j=0;j<m;j++){
				if(b[i][j]=='1')a[i][j+1]=1;
				else if(b[i][j]=='0')a[i][j+1]=0;
			}
		}
		if(c==0&&f==0){
			printf("0 0\n");
			continue;
		}
		for(int i=1;i<m;i++){
			ck(i);
			ansc+=ans1,ansf+=ans2;
		}
		if(c==0)ansc=0;
		if(f==0)ansf=0;
		printf("%d %d\n",ansc,ansf);
	}
	return 0;
}