#include<bits/stdc++.h>
using namespace std;
int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9') f=(ch=='-')?-1:1,ch=getchar();
	while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return x*f;
}
const int N=1005,mod=998244353;
int a[N][N],cnt[N][N],till[N][N],C[N][N],F[N][N];
void add(int &x,int y){x+=y,(x>=mod)&&(x-=mod);}
int main()
{
	freopen("plant.in","r",stdin);
	freopen("plant.out","w",stdout);
	int t=read(),id=read();
	while(t--)
	{
		memset(cnt,0,sizeof(cnt)),memset(till,0,sizeof(till)),memset(C,0,sizeof(C)),memset(F,0,sizeof(F));
		int n=read(),m=read(),c=read(),f=read();
		if(c==0&&f==0)
		{
			puts("0 0");
			continue;
		}
		for(int i=1;i<=n;i++/*,puts("")*/)
		{
			for(int j=1;j<=m;j++)
			{
				char ch=getchar();
				while(ch!='0'&&ch!='1') ch=getchar();
				a[i][j]=ch^48;
			}
			for(int j=m;j>=1;j--)
				if(a[i][j]) cnt[i][j]=0;
				else cnt[i][j]=cnt[i][j+1]+1;
//			for(int j=1;j<=m;j++) cout<<cnt[i][j]<<' ';
		}
		for(int j=m;j>=1;j--)
			for(int i=n;i>=1;i--)
				if(!a[i][j])
					add(C[i][j],C[i+1][j]+cnt[i][j]-1);
	/*	for(int i=1;i<=n;i++,puts(""))
			for(int j=1;j<=m;j++)
				cout<<C[i][j]<<' ';*/
		int ans=0;
		for(int i=1;i<=n-2;i++)
			for(int j=1;j<m;j++)
				if(!a[i][j]&&!a[i+1][j])
					add(ans,1ll*(cnt[i][j]-1)*C[i+2][j]%mod);
		if(c) printf("%d ",ans);
		for(int j=1;j<=m;j++/*,puts("")*/)
		{
			for(int i=n;i>=1;i--)
				if(a[i][j]) till[i][j]=0;
				else till[i][j]=till[i+1][j]+1;
//			for(int i=1;i<=n;i++) cout<<till[i][j]<<' ';
		}
		for(int j=m;j>=1;j--)
			for(int i=n;i>=1;i--)
				if(!a[i][j])
					add(F[i][j],F[i+1][j]+1ll*(cnt[i][j]-1)*(till[i][j]-1)%mod);
		ans=0;
		for(int i=1;i<=n-3;i++)
			for(int j=1;j<m;j++)
				if(!a[i][j]&&!a[i+1][j])
					add(ans,1ll*(cnt[i][j]-1)*F[i+2][j]%mod);
		printf("%d\n",ans);
	}
	return 0;
}
/*
1 0
4 3 1 1
001
010
000
000
*/
/*why it is wrong*/
/*cnt is not -1*/
/*9:12 C is finished*/
/*9:28 F is finished*/
/*freopen*/
/*wait,the ans of tset3 is 114514*/
/*return 0;*/