#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int M=998244353,N=1e3+5;
int t,id,n,m,c,f;
int a[N][N];
ll ri[N][N],down[N][N],up[N][N],ansc,ansf;
char ch;
int main()
{
cin>>t>>id;
while(t--)
{
ansc=ansf=0;
memset(ri,0,sizeof(ri));
memset(down,0,sizeof(down));
memset(up,0,sizeof(up));
memset(a,0,sizeof(a));
cin>>n>>m>>c>>f;
if(c==0&&f==0)
{
printf("0 0\n");
continue;
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
cin>>ch;
if(ch=='1') a[i][j]=1;
}
}
for(int i=1;i<=n;++i)
{
for(int j=m;j>=1;--j)
{
if(a[i][j]==1) ri[i][j]=0;
else if(j==m) ri[i][j]=1;
else ri[i][j]=ri[i][j+1]+1;
}
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
if(i<=2) up[i][j]=0;
else if(a[i-2][j]==1||a[i-1][j]==1||a[i][j]==1) up[i][j]=0;
else up[i][j]=up[i-1][j]+ri[i-2][j]-1;
}
}
for(int i=n;i>=1;--i)
{
for(int j=1;j<=m;++j)
{
if(a[i][j]==1) down[i][j]=0;
else if(i==n) down[i][j]=1;
else down[i][j]=down[i+1][j]+1;
}
}
for(int i=3;i<=n;++i)
{
for(int j=1;j<m;++j)
{
if(ri[i][j]&&up[i][j])
{
ansc=(ansc+up[i][j]*(ri[i][j]-1))%M;
if(down[i][j])ansf=(ansf+up[i][j]*(ri[i][j]-1)*(down[i][j]-1))%M;
}
}
}
printf("%d %d\n",ansc,ansf);
}
return 0;
}