#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAX=1145;
const int MOD=998244353;
bool arr[MAX][MAX];
int cntright[MAX][MAX];
int cntdown[MAX][MAX];
char in[MAX];
int t,id,n,m,c,f,ansc,ansf;
int main() {
	freopen("plant.in","r",stdin);
	freopen("plant.out","w",stdout);
	scanf("%d%d",&t,&id);
	while(t--) {
		ansc=0;
		memset(arr,0,sizeof(arr));
		scanf("%d%d%d%d",&n,&m,&c,&f);
		for(int i=1; i<=n; i++) {
			scanf("%s",in+1);
			for(int j=1; j<=m; j++) {
				arr[i][j]=in[j]-'0';
			}
		}
		for(int i=1; i<=n; i++) {
			for(int j=m; j>=1; j--) {
				if(arr[i][j]) {
					continue;
				}
				if(j==m) {
					cntright[i][j]=1;
				}
				cntright[i][j]=cntright[i][j+1]+1;
			}
		}
		for(int j=1; j<=m; j++) {
			for(int i=n; i>=1; i--) {
				if(arr[i][j]) {
					continue;
				}
				if(i==n) {
					cntdown[i][j]=1;
					continue;
				}
				cntdown[i][j]=cntdown[i+1][j]+1;
			}
		}
//		for(int i=1; i<=n; i++) {
//			for(int j=1; j<=m; j++) {
//				cout<<cntright[i][j]<<" ";
//			}
//			cout<<endl;
//		}
//		cout<<endl;
//		for(int i=1; i<=n; i++) {
//			for(int j=1; j<=m; j++) {
//				cout<<cntdown[i][j]<<" ";
//			}
//			cout<<endl;
//		}
		for(int j=1; j<=m; j++) {
			for(int i1=1; i1<=n; i1++) {
				if (cntright[i1][j]<2) {
					continue;
				}
				if (arr[i1+1][j]) {
					continue;
				}
				for(int i2=i1+2; i2<=n; i2++) {
					if(arr[i2][j]) {
						break;
					}
					if(cntright[i2][j]<2) {
						continue;
					}
					ansc=(ansc+1ll*(cntright[i1][j]-1)*(cntright[i2][j]-1)%MOD)%MOD;
					ansf=(ansf+1ll*(cntright[i1][j]-1)*(cntright[i2][j]-1)%MOD*(cntdown[i2][j]-1)%MOD)%MOD;
//					cout<<"Added at row "<<i1<<" and "<<i2<<endl;
//					cout<<"Ansc: "<<ansc<<endl;cout<<"Ansf: "<<ansf<<endl;
				}
			}
		}
		printf("%d %d\n",c*ansc,f*ansf);
	}
	return 0;
}
