#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const int N=1010,mod=998244353;
int T,id,n,m,c,f,ansC,ansF;
int g[N][N],h[N][N];
string a[N];

void init(){
	for(int k=0;k<m;k++)
		for(int i=1;i<=n;i++){
			int num=0;
			for(int j=k;j<m;j++){
				if(a[i][j]=='0') num++;
				else if(a[i][j]=='1') break;
			}	
			g[i][k]=num;
		}
	for(int k=1;k<=n;k++)
		for(int i=0;i<m;i++){
			int num=0;
			for(int j=k;j<=n;j++){
				if(a[j][i]=='0') num++;
				else if(a[j][i]=='1') break;
			}
			h[k][i]=num;
		}
}

void solveC(){
	ansC=0;
	for(int k=0;k<m;k++)
		for(int i=1;i<=n-2;i++){
			if(g[i][k]<2||g[i+1][k]==0) continue;
			int res=g[i][k]-2+1;
			for(int j=i+2;j<=n;j++){
				if(g[j][k]==0) break;
				int num=g[j][k]-2+1;
				ansC=(ansC+(ll)res*num%mod)%mod;
			}
		}
}

void solveF(){
	ansF=0;
	for(int k=0;k<m;k++)
		for(int i=1;i<=n-3;i++){
			if(g[i][k]<2||g[i+1][k]==0) continue;
			int res=g[i][k]-2+1;
			for(int j=i+2;j<=n-1;j++){
				if(g[j][k]==0) break;
				int num1=g[j][k]-2+1,num2=h[j+1][k];
				ansF=(ansF+(ll)res*num1%mod*num2%mod)%mod;
			}
		}
}

int main(){
	freopen("plant.in","r",stdin);
	freopen("plant.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>T>>id;
	while(T--){
		memset(g,0,sizeof g);
		memset(h,0,sizeof h);
		ansC=-1,ansF=-1;
		cin>>n>>m>>c>>f;
		bool is_A=true,is_B=true;
		if(c==0&&f==0){
			cout<<"0 0"<<endl;
			continue;
		}
		if(c==0) ansC=0;
		else if(f==0) ansF=0;
		for(int i=1;i<=n;i++){
			cin>>a[i];
			if(is_A)
				for(int j=0;j<m;j++)
					if((j+1)%3==1&&a[i][j]=='1') is_A=false;
					else if((j+1)%3==0&&a[i][j]=='0') is_A=false;
			if(is_B)
				for(int j=0;j<m;j++)
					if(i%4==0&&a[i][j]=='0') is_B=false;
					else if(i%4==1&&a[i][j]=='1') is_B=false;
		}
		if(is_A) ansC=0;
		if(is_B) ansF=0;
		init();
		if(ansC==-1) solveC();
		if(ansF==-1) solveF();
		ansC=(ll)ansC*c%mod;ansF=(ll)ansF*f%mod;
		cout<<ansC<<" "<<ansF<<endl;
	}
	return 0;
}