#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<string>
#define ll long long
#define bug cout<<"bug"<<"\n"
#define mk make_pair
#define fi first
#define se second
#define pii pair<ll,ll>
#define fo(i,a,b) for(ll i=a;i<=b;i++)
#define rfo(i,a,b) for(ll i=a;i>=b;i--)
#define ls (p<<1)
#define rs (p<<1|1)
using namespace std;
const ll maxn=1000+100;
const ll inf=0x3f3f3f3f;
const double eps=1e-9;
const ll mod=998244353;
inline ll rd(){ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
ll T,id;
ll n,m,c,f;
char a[maxn][maxn];
ll suml[maxn][maxn],sumup[maxn][maxn],sumd[maxn][maxn],sums[maxn][maxn];
int main(){
T=rd(),id=rd();
while(T--){
n=rd(),m=rd(),c=rd(),f=rd();
if(c==0&&f==0){cout<<"0 0"<<"\n";continue;}
memset(suml,0,sizeof(suml));
memset(sumup,0,sizeof(sumup));
memset(sumd,0,sizeof(sumd));
memset(sums,0,sizeof(sums));
for(ll i=1;i<=n;i++)
for(ll j=1;j<=m;j++)
cin>>a[i][j];
for(ll i=1;i<=n;i++)
for(ll j=m;j>=1;j--)
if(a[i][j]=='0') suml[i][j]=suml[i][j+1]+1;
for(ll j=1;j<=m;j++)
for(ll i=1;i<=n;i++)
if(a[i][j]=='0') sums[i][j]=sums[i-1][j]+1;
for(ll j=1;j<=m;j++)
for(ll i=1;i<=n;i++)
if(a[i][j]=='0') sumup[i][j]=(sumup[i-1][j]+suml[i][j]-1)%mod;
for(ll j=1;j<=m;j++)
for(ll i=n;i>=1;i--)
if(a[i][j]=='0') sumd[i][j]=sumd[i+1][j]+1;
ll sumc=0,sumf=0;
for(ll j=1;j<=m;j++){
for(ll i=3;i<=n;i++){
if(a[i][j]=='1') continue;
ll p=sums[i][j];
p--;
if(p<2) continue;
ll t=sumup[i-2][j];
sumc+=t*(suml[i][j]-1)%mod;
sumc%=mod;
// cout<<sumc<<" "<<i<<" "<<j<<" "<<t<<" "<<p<<"\n";
}
}
for(ll j=1;j<=m;j++){
for(ll i=3;i<=n;i++){
if(a[i][j]=='1') continue;
ll p=sums[i][j];
p--;
if(p<2) continue;
ll t=sumup[i-2][j];
sumf+=t*(suml[i][j]-1)%mod*(sumd[i+1][j])%mod;
sumf%=mod;
}
}
cout<<sumc*c<<" "<<sumf*f<<"\n";
}
return 0;
}
RE了一分