#include<bits/stdc++.h>
#define Dtmyj trash
#define ll long long
#define db double
using namespace std;

const int mod=998244353;
int n,m,c,f,T,id;
ll ansc,ansf;
int ld[1005][1005][2];
bool land[1005][1005];

void dutu(){
	scanf("%d%d%d%d",&n,&m,&c,&f);
	for(int i=1;i<=n;i++){
		string s;
		cin>>s;
		s=' '+s;
		for(int j=1;j<=m;j++){
			land[i][j]=s[j]-'0';
		}
	}
}

int main(){
	freopen("plant.in","r",stdin);
	freopen("plant.out","w",stdout);
	scanf("%d%d",&T,&id);
	if(id==1){
		while(T--){
			dutu();
			printf("0 0\n");
		}
	}else if(id==2){
		while(T--){
			dutu();
			if(land[1][1] || land[1][2] || land[2][1] || land[3][1] || land[3][2]){
				printf("0 0\n");
			}else{
				printf("1 0\n");
			}
		}
	}else{
		while(T--){
			ansc=0;
			ansf=0;
			dutu();
			memset(ld,0,sizeof(ld));
			for(int i=1;i<=n;i++){
				int j=1,x=1;
				while(1){
					if(land[i][j]){
						if(j==m){
							break;
						}
						j++;
						x=j;
						continue;
					}
					ld[i][x][1]++;
					if(j==m){
						break;
					}
					j++;
				}
			}
			for(int i=1;i<=n;i++){
				for(int j=2;j<=m;j++){
					if(!land[i][j-1]){
						ld[i][j][1]=ld[i][j-1][1]-1;
					}
				}
			}
			for(int i=1;i<=m;i++){
				int j=1,x=1;;
				while(1){
					if(land[j][i]){
						if(j==n){
							break;
						}
						j++;
						x=j;
						continue;
					}
					ld[x][i][0]++;
					if(j==n){
						break;
					}
					j++;
				}
			}
			for(int i=1;i<=m;i++){
				for(int j=2;j<=n;j++){
					if(!land[j-1][i]){
						ld[j][i][0]=ld[j-1][i][0]-1;
					}
				}
			}
			for(int i=1;i<=n-2;i++){
				for(int j=1;j<=m-1;j++){
					if(ld[i][j][1]<2 || ld[i][j][0]<3 || land[i][j]){
						continue;
					}
					for(int p=i+2;p<=n;p++){
						if(land[p][j]){
							break;
						}
						if(ld[p][j][1]<2){
							continue;
						}
						ansc=(ansc+(ll)(ld[i][j][1]-1)%mod*(ll)(ld[p][j][1]-1)%mod)%mod;
					}
				}
			}
			for(int i=1;i<=n-3;i++){
				for(int j=1;j<=m-1;j++){
					if(ld[i][j][1]<2 || ld[i][j][0]<4 || land[i][j]){
						continue;
					}
					for(int p=i+2;p<=n-1;p++){
						if(land[p][j]){
							break;
						}
						if(ld[p][j][0]<2){
							continue;
						}
						ansf=(ansf+(ll)(ld[i][j][1]-1)%mod*(ll)(ld[p][j][1]-1)%mod*(ll)(ld[p][j][0]-1)%mod)%mod;
					}
				}
			}
			printf("%lld %lld\n",(ll)ansc*c%mod,(ll)ansf*f%mod);
		}
	}
    return 0;
}
