#include<iostream>
#include<cstdio>
#include<cstring>
#define F(i,j,k) for(int i=(j);i<=(k);i++)
#define N 1002
#define P 998244353
using namespace std;
int n,m,T,id,a1;
bool map[N][N];
int mapk[N][N];
bool c,f;
int ans;
void doc();
void dof();
int main(){
cin>>T>>id;
int k,tmp,tmp2;
while(T--){
memset(map,0,sizeof(map));
memset(mapk,0,sizeof(mapk));
cin>>n>>m>>c>>f;getchar();
F(i,1,n){
F(j,1,m)
{
map[i][j]=getchar()=='0'?false:true;
}
getchar();
}
F(i,1,n)
F(j,1,m-1){
if(map[i][j])continue;
tmp2=j;
F(h,1,m-j+1)
{
if(map[i][tmp2])break;
else tmp2++;
}
a1=tmp2-j>0?tmp2-j-1:0;
mapk[i][j]=a1;
}
doc();
cout<<' ';
dof();
cout<<endl;
}
return 0;
}
void doc(){
int tt,p,anstmp;
ans=0;
F(i,1,n-2)
F(j,1,m-1)
{
anstmp=0;
if(mapk[i][j]){
tt=mapk[i][j],p=i+1;
if(map[p][j])p=n+100;
while(p<n){
p++;
if(!map[p][j])anstmp+=mapk[p][j];
else break;
}
}
ans+=(anstmp*tt)%P;
ans%=P;
}
cout<<ans*c;
}
void dof(){
int tt,p,anstmp;
ans=0;
F(i,1,n-3)
F(j,1,m-1)
{
anstmp=0;
if(mapk[i][j]){
tt=mapk[i][j],p=i;
while(!map[p+1][j]&&p<n){
p++;
}
if(i+2<p){
F(h,i+2,p-1){
anstmp+=mapk[h][j]*(p-i-2);
}
}
}
ans+=(anstmp*tt)%P;
ans%=P;
}
cout<<ans*f;
}