#include<bits/stdc++.h>
using namespace std;
const int MAX=1e3,Mod=998244353;
bool Be;
int T,Id,n,m,flgc,flgf,nxt[MAX+5][MAX+5],lst[MAX+5][MAX+5],d[MAX+5][MAX+5];
char a[MAX+5][MAX+5];
bool Ed;
void Solv(){
	memset(nxt,0,sizeof(nxt));
	memset(lst,0,sizeof(lst));
	memset(d,0,sizeof(d));
	scanf("%d%d%d%d",&n,&m,&flgc,&flgf);
	for(int i=1;i<=n;i++)
	 for(int j=1;j<=m;j++){
	 	char c=getchar();
	 	for(;c!='0'&&c!='1';c=getchar());
	 	a[i][j]=c;
	 }
	for(int i=1;i<=n;i++){
		for(int j=m;j>=1;j--)
		 if(a[i][j]=='1') nxt[i][j]=0;
		 else {
		 	if(j==m) nxt[i][j]=1;
		 	else nxt[i][j]=nxt[i][j+1]+1;
		 }
	}
	for(int i=1;i<=n;i++)
	 for(int j=1;j<=m;j++)
	  if(nxt[i][j]) --nxt[i][j];
	for(int i=2;i<=n;i++)
	 for(int j=1;j<=m;j++)
	  if(a[i][j]=='0')
	   lst[i][j]=(lst[i-1][j]+nxt[i-1][j])%Mod;
	long long ansC=0;
	for(int i=2;i<=n;i++)
	 for(int j=1;j<=m;j++)
	  ansC=(ansC+1ll*lst[i-1][j]*nxt[i][j])%Mod;
	  
	for(int i=n;i>=1;i--){
		for(int j=1;j<=m;j++)
		 if(a[i][j]=='1') d[i][j]=0;
		 else{
		 	if(i==n) d[i][j]=1;
		 	else d[i][j]=d[i+1][j]+1; 
		 }
	}
	for(int i=1;i<=n;i++)
	 for(int j=1;j<=m;j++)
	  if(d[i][j]) --d[i][j];
	long long ansF=0;
	for(int i=2;i<=n;i++)
	 for(int j=1;j<=m;j++)
	  ansF=(ansF+1ll*lst[i-1][j]*nxt[i][j]%Mod*d[i][j])%Mod;
	printf("%lld %lld\n",flgc*ansC,flgf*ansF);
}
int main(){
//	printf("%.0lf\n",(&Ed-&Be)/1024.0/1024.0);
	freopen("plant.in","r",stdin);
	freopen("plant.out","w",stdout);
	scanf("%d%d",&T,&Id);
	for(int t=1;t<=T;t++) Solv();
	return 0;
}
