#include<bits/stdc++.h>
#define int long long
#define little_dog puts("OvO,2021zjhs005 is better than me.")
#define lcfollower break
#define _2021zjhs005 continue
#define inf 0x3f3f3f3f
#define infi 0x3f3f3f3f3f3f3f3fll
#define up(i,x,y) for(register int i=x;i<=y;++i)
#define dn(i,x,y) for(register int i=x;i>=y;--i)
using namespace std;
inline int read(){int 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<<1)+(x<<3)+(ch^48),ch=getchar();return x*f;}
inline void write(int x){if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10|48);}
inline void writeln(int x){write(x),putchar('\n');}
inline void writesp(int x){write(x),putchar(' ');}
inline int readone(){char ch=getchar();while(ch<'0'||ch>'9')ch=getchar();return ch-'0';}
struct lc{
inline void fre(){freopen(".in","r",stdin);freopen(".out","w",stdout);}
inline void ext(){exit(0);}
};namespace LC{
const long long mod=998244353;
int a[1001][1001],ri[1001][1001],down[1001][1001];
inline signed main(){
lc follower;
int T=read(),id=read();
while(T--){
int n=read(),m=read(),c=read(),f=read();long long ansc=0,ansf=0;
up(i,1,n)up(j,1,m)a[i][j]=readone();
up(i,1,n)dn(j,m,1){
if(a[i][j]==1)ri[i][j]=0;
else ri[i][j]=ri[i][j+1]+1;
}dn(i,n,1)up(j,1,m){
if(a[i][j]==1)down[i][j]=0;
else down[i][j]=down[i+1][j]+1;
}up(i,1,n)
up(j,i+2,n)
up(k,1,m)
if(down[i][k]>=j-i+1){
int now=(ri[i][k+1]*ri[j][k+1])%mod;
ansc=(ansc+now)%mod;
ansf=(ansf+now*down[j+1][k])%mod;
}
writesp(ansc*c),writeln(ansf*f);
}follower.ext();
}
}signed main(){
LC::main();
}