#include<bits/stdc++.h>
#define N 1005
#define MOD 998244353
using namespace std;

int n,m,c,f,ans_c,ans_f,T,id;
int nxt_x[N][N],nxt_y[N][N],dp[N];
bool a[N][N];

void DFS1(const int& x,const int& y)
{
	if(y==m)
	{
		nxt_x[x][y]=y;
		return;
	}
	
	DFS1(x,y+1);
	
	if(a[x][y]==a[x][y+1])
		nxt_x[x][y]=nxt_x[x][y+1];
	
	else nxt_x[x][y]=y;
}

void DFS2(const int& x,const int& y)
{
	if(x==n)
	{
		nxt_y[x][y]=x;
		return;
	}
	
	DFS2(x+1,y);
	
	if(a[x][y]==a[x+1][y])
		nxt_y[x][y]=nxt_y[x+1][y];
	
	else nxt_y[x][y]=x;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	freopen("plant.in","r",stdin);
	freopen("plant.out","w",stdout);
	
	cin>>T>>id;
	while(T--)
	{
		cin>>n>>m>>c>>f;
		
		ans_c=ans_f=0;
		memset(a,false,sizeof a);
		
		char x;
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
				cin>>x,a[i][j]=x-'0';
		
		for(int i=1;i<=n;i++)
			DFS1(i,1);
		
		for(int i=1;i<=n;i++)
			nxt_x[i][m+1]=m+1;
		
		for(int i=1;i<=n;i++)
			nxt_y[n+1][i]=n+1;
		
		for(int i=1;i<=m;i++)
			DFS2(1,i);
		
		for(int i=1;i<=m;i++)
		{
			int j=1;
			if(j<=m&&a[j][i])
				j=nxt_y[j][i]+1;
			
			while(j<=n)
			{
				dp[j-1]=0;
				dp[j]=0;
				dp[j+1]=0;
				
				for(int k=j+2;k<=nxt_y[j][i];k++)
				{
					dp[k]=(dp[k-1]+nxt_x[k-2][i]-i)%MOD;
					ans_c=(ans_c+dp[k]*(nxt_x[k][i]-i)%MOD)%MOD;
				}
				
				j=nxt_y[j][i]+1;
				j=nxt_y[j][i]+1;
			}
		}
		
		for(int i=1;i<=m;i++)
		{
			int j=1;
			if(j<=m&&a[j][i])
				j=nxt_y[j][i]+1;
			
			while(j<=n)
			{
				dp[j-1]=0;
				dp[j]=0;
				dp[j+1]=0;
				
				for(int k=j+2;k<nxt_y[j][i];k++)
				{
					dp[k]=(dp[k-1]+nxt_x[k-2][i]-i)%MOD;
					ans_f=(ans_f+dp[k]*(nxt_x[k][i]-i)%MOD*(nxt_y[j][i]-k)%MOD)%MOD;
				}
				
				j=nxt_y[j][i]+1;
				j=nxt_y[j][i]+1;
			}
		}
		
		cout<<(ans_c*c)%MOD<<' '<<(ans_f*f)%MOD<<endl;
	}
}
