#include<bits/stdc++.h>
#define int long long
using namespace std;
const int M=998244353;
int a[1005][1005];
int cnt[1005][1005];
int nx[1005][1005];
int mx[1005][1005];
signed main(){
int T,x;
scanf("%d%d",&T,&x);
while(T--){
memset(cnt,0,sizeof(cnt));
memset(nx,0,sizeof(nx));
memset(mx,0,sizeof(mx));
int n,m,c,f;
int ansc=0,ansf=0;
scanf("%d%d%d%d",&n,&m,&c,&f);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char c;
cin>>c;
a[i][j]=c-'0';
}
}
if(c==0&&f==0){
printf("0 0\n");
continue;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cnt[i][j]=cnt[i-1][j]+a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=m;j>=1;j--){
if(!a[i][j]){
mx[i][j]=max(j,mx[i][j+1]);
}
}
}
for(int j=1;j<=m;j++){
for(int i=n;i>=1;i--){
if(!a[i][j]){
nx[i][j]=max(i,nx[i+1][j]);
}
}
}
for(int k=1;k<=m;k++){
for(int i=1;i<=n;i++){
if(a[i][k])continue;
for(int j=i+2;j<=n;j++){
if(a[j][k]) break;
int cnt1=0,cnt2=0,cnt3=0;
if(cnt[j][k]-cnt[i][k]==0){
cnt1=mx[i][k]-k;
cnt2=mx[j][k]-k;
}
cnt3=nx[j][k]-j;
int y=cnt1*cnt2;
y%=M;
ansc=(ansc+y)%M;
ansf=(ansf+y*cnt3)%M;
}
}
}
printf("%lld ",ansc%M);
if(f==0) printf("0\n");
else printf("%lld\n",ansf%M);
}
return 0;
}