#include<bits/stdc++.h>
using namespace std;
bool d[1090][1090];
long long gx[1090][1090];
long long gx2[1090][1090];
long long anc,anf;
const long long N=98244353,o=0;
void qk(){
memset(d,0,sizeof(d));
memset(gx,0,sizeof(gx));
memset(gx2,0,sizeof(gx2));
anc=anf=0;
}
int main(){
int t,id;
cin>>t>>id;
int n,m,c,f;
char tmp;
while(t--){
qk();
cin>>n>>m>>c>>f;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>tmp;
d[i][j]=tmp-'0';
}
}
for(int i=n;i>=1;i--){
for(int j=m;j>=1;j--){
if(d[i][j]==1){
gx[i][j]=-1;
}
else if(j==m){
gx[i][j]=0;
}
else{
gx[i][j]=gx[i][j+1]+1;
}
}
}
for(int i=n;i>=1;i--){
for(int j=m;j>=1;j--){
if(d[i][j]==1){
gx2[i][j]=-1;
}
else if(i==n){
gx2[i][j]=0;
}
else{
gx2[i][j]=gx2[i+1][j]+1;
}
}
}
long long cnt=0;
for(int j=1;j<=m;j++){
cnt=0;
for(int i=1;i<=n;i++){
if(d[i][j]==1){
cnt=0;
continue;
}
anc+=(cnt*gx[i][j])%N;
anc%=N;
anf+=max(o,((cnt*gx[i][j])*gx2[i][j]))%N;
anf%=N;
cnt+=max(gx[i-1][j],o);
}
}
cout<<anc*c<<" "<<anf*f<<endl;
}
return 0;
}
真的不知道错哪了