#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define MADE_IN_HEAVEN ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N=1100;
const ll M=998244353;
int t,id;
int n,m,c,f;
string s[N];
ll val_down[N][N];
ll val_right[N][N];
ll sum[N][N];//,sumf[N][N];
void test(){
	for(int i=0;i<n;i++,cout<<"\n"){
		for(int j=0;j<m;j++){
			cout<<sum[i][j]<<" ";
		}
	}
}
ll calc_c(){
	ll res=0;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(val_down[i][j]>2&&val_right[i][j]>1){
				res=(res+(val_right[i][j]-1)*sum[i+2][j])%M;
			}
		}
	}
	return res;
}
ll calc_f(){
	ll res=0;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(val_down[i][j]>3&&val_right[i][j]>1){
				res=(res+(val_right[i][j]-1)*(sum[i+2][j]-sum[i+val_down[i][j]-1][j])*(val_down[i][j]-3))%M;
			}
		}
	}
	return res;
}
int main(){
	freopen("plant.in","r",stdin);
	freopen("plant.out","w",stdout);
	MADE_IN_HEAVEN
	cin>>t>>id;
	if(id==1){
		while(t--){
			cout<<0<<" "<<0<<"\n";
		}
		return 0;
	}
	while(t--){
		memset(val_down,0,sizeof val_down);
		memset(val_right,0,sizeof val_right);
		memset(sum,0,sizeof sum);
//		memset(sumf,0,sizeof sumf);
		cin>>n>>m>>c>>f;
		for(int i=0;i<n;i++){
			cin>>s[i];
		}
		for(int i=0;i<m;i++){
			ll cnt=0;
			int pre=0;
			for(int j=0;j<n;j++){
				if(s[j][i]=='0'){
					cnt++;
				}
				else{
					for(int k=pre;k<j;k++) val_down[k][i]=cnt-(k-pre);
					cnt=0;
					pre=j+1;
				}
			}
			for(int k=pre;k<n;k++) val_down[k][i]=cnt-(k-pre);
		}//down
		for(int i=0;i<n;i++){
			ll cnt=0;
			int pre=0;
			for(int j=0;j<m;j++){
				if(s[i][j]=='0'){
					cnt++;
				}
				else{
					for(int k=pre;k<j;k++) val_right[i][k]=cnt-(k-pre);
					cnt=0;
					pre=j+1;
				}
			}
			for(int k=pre;k<m;k++) val_right[i][k]=cnt-(k-pre);
		}//right
		for(int i=0;i<m;i++){
			for(int j=n-1;j>=0;j--){
				if(val_right[j][i]==0){
					sum[j][i]=0;
					continue;
				}
				if(j==n-1){
					sum[j][i]=val_right[j][i]-1;
				}
				else{
					sum[j][i]=(sum[j+1][i]+val_right[j][i]-1)%M;
				}
			}
		}
//		for(int i=0;i<m;i++){
//			for(int j=n-1;j>=0;j--){
//				if(val_right[j][i]==0){
//					sumf[j][i]=0;
//					continue;
//				}
//				if(j==n-1){
//					sumf[j][i]=val_right[j][i]-1;
//				}
//				else{
//					sumf[j][i]=(sum[j+1][i]+val_right[j][i]-1)%M;
//				}
//			}
//		}
//		test();
		ll ansc=calc_c();
		ll ansf=calc_f();
		if(!c){
			ansc=0;
		}
		if(!f){
			ansf=0;
		}
		cout<<ansc<<" "<<ansf<<"\n";
	}
	return 0;
}