#include<bits/stdc++.h>
#define int long long
using namespace std;
int T,id,n,m,c,f,a[1050][1050],ansc,ansf,f1[1050][1050],s1[1050][1050],h[1050][1050],h1[10510][1050];
const int mod=998244353;
string s;
signed main(){
//freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
scanf("%lld%lld",&T,&id);
while(T--){
memset(a,1,sizeof(a));
memset(s1,0,sizeof(s1));
memset(h,0,sizeof(h));
memset(h1,0,sizeof(h1));
memset(f1,0,sizeof(f1));
ansc=ansf=0;
scanf("%lld%lld%lld%lld",&n,&m,&c,&f);
if(c==0 && f==0){
printf("0 0\n");
continue;
}
for(int i=1;i<=n;i++){
cin>> s;
for(int j=1;j<=s.length();j++) a[i][j]=s[j-1]-'0';
}
for(int i=1;i<=n;i++){
for(int j=m;j>=1;j--){
if(a[i][j]) continue;
h1[i][j]=(h1[i][j]%mod+((h1[i][j+1])%mod)+1)%mod;
}
}
for(int j=1;j<=m;j++){
for(int i=n;i>=1;i--){
if(a[i][j]) continue;
s1[i][j]=(s1[i][j]%mod+s1[i+1][j]%mod+1)%mod;
}
}
for(int j=1;j<=m;j++){
for(int i=n;i>=1;i--){
if(a[i][j]) continue;
h[i][j]=(h[i][j]%mod+(h[i+1][j]%mod+h1[i][j]%mod-1)%mod)%mod;
f1[i][j]=(f1[i+1][j]%mod+((h1[i][j]-1)%mod)*((s1[i][j]-1)%mod)%mod)%mod;
}
}
for(int j=1;j<=m;j++){
for(int i=1;i<=n;i++){
if(h1[i][j]>1 && !a[i+1][j] &&!a[i][j] && h[i+2][j]){
ansc=(ansc%mod+((h1[i][j]-1)%mod)*(h[i+2][j]%mod)%mod)%mod;
if(f1[i][j]) ansf=(ansf%mod+((h1[i][j]-1)%mod)*(f1[i+2][j]%mod)%mod)%mod;
//cout<<i<<' '<<j<< ' '<< ansc<<' '<< ansf<<'\n';
}
}
}
printf("%lld %lld\n",(ansc*c)%mod,(ansf*f)%mod);
}
return 0;
}
应该没越界?