#include<bits/stdc++.h>
using namespace std;
const long long mod=998244353;
char plc[1010][1010];
int tab[2][1010][1010];
void rev(int ro,int beg,int end){
	int mid=(beg+end)/2;
	for(int i=0;beg+i<=mid;i++) swap(tab[1][beg+i][ro],tab[1][end-i][ro]);
	return;
}
int main() {
	freopen("plant.in","r",stdin);
	freopen("plant.out","w",stdout);
	int t,id; scanf("%d%d",&t,&id);
	while(t--) {
		int n,m,c,f;
		scanf("%d%d%d%d",&n,&m,&c,&f);
		if(c==0&&f==0){printf("0 0\n"); continue;}
		long long ansc=0,ansf=0;
		int cnt=-1,st;
		bool pd=false;
		for(int i=0;i<n;i++){
			cnt=-1; pd=false;
			scanf("%s",plc[i]);
			for(int j=0;j<m;j++){
				tab[0][i][j]=0;
				if((plc[i][j]=='0')&&(!pd)) st=j,pd=true,cnt++;
				else if(plc[i][j]=='0') tab[0][i][j]=++cnt;
				else if(plc[i][j]=='1'&&pd)  reverse(tab[0][i]+st,tab[0][i]+j),pd=false,cnt=-1;
			}if(cnt>=0) reverse(tab[0][i]+st,tab[0][i]+m);
		}
		cnt=-1; pd=false;
		for(int j=0;j<m;j++){
			cnt=-1; pd=false;
			for(int i=0;i<n;i++){
				tab[1][i][j]=0;
				if((plc[i][j]=='0')&&(!pd)) st=i,pd=true,cnt++;
				else if(plc[i][j]=='0') tab[1][i][j]=++cnt;
				else if(plc[i][j]=='1'&&pd)  rev(j,st,i-1),pd=false,cnt=-1;
			}if(cnt>=0) rev(j,st,n-1);
		}
		for(int j=0;j<m;j++){
			for(int i=0;i<n;i++){
				if(tab[0][i][j]){
					for(int k=i+2,l=0;k+l<=i+tab[1][i][j];l++){
						int pre=(tab[0][k+l][j]*tab[0][i][j])%mod;
						ansc=(ansc+pre)%mod;
						ansf=(ansf+(pre*tab[1][k+l][j])%mod)%mod;
					}
				}
			}
		}printf("%lld %lld\n",ansc*c,ansf*f);
	}
	return 0;
}
