//不向抑郁与焦虑投降，这个世界终会有我们存在的地方。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<ctime>
#include<cassert>
#include<tuple>
#define siz(x) int((x).size())
#define all(x) std::begin(x),std::end(x)
#define fi first
#define se second
using std::cin;using std::cout;
using std::min;using std::max;
template<typename any>inline void cmin(any &x,const any &y){if(x>y)x=y;}
template<typename any>inline void cmax(any &x,const any &y){if(x<y)x=y;}
using loli=long long;
using bsi=std::basic_string<int>;
using bsc=std::string;
template<typename any>inline any get(){any x;cin>>x;return x;}
constexpr int N=1002,P=998244353;
int T,id,n,m,C,F,a[N][N],f[N][N];
// f 向右延伸的长度
inline int&add1(int&x,int y){return (x+=y)<P?x:x-=P;}
inline int del0(int x,int y){return (x-=y)<0?x+P:x;}
inline int&del1(int&x,int y){return (x-=y)<0?x+=P:x;}
inline int mul0(int x,int y){return int(1ll*x*y%P);}
namespace _C{
	int calc(int l,int r,int j){
		if(l>n)return 0;
		int res=0,cnt=0;
		for(int i=l;i<=r;i++)cnt+=f[i][j];
		for(int i=l;i<r;i++){
			cnt-=f[i][j];
			add1(res,mul0(f[i][j],cnt-f[i+1][j]));
		}
		return res;
	}
	int solve(){
		int res=0;
		for(int j=1;j<=m;j++){
			int pre=1;
			for(int i=1;i<=n;i++){
				if(a[i][j]==1)add1(res,calc(pre,i-1,j)),pre=i+1;
			}
			add1(res,calc(pre,n,j));
		}
		return res*C;
	}
}
namespace _F{
	int calc(int l,int r,int j){
		if(l>n)return 0;
		int res=0,cnt=0;
		for(int i=l;i<=r;i++)add1(cnt,mul0(f[i][j],r-i));
		for(int i=l;i<r;i++){
			del1(cnt,mul0(f[i][j],r-i));
			add1(res,mul0(f[i][j],del0(cnt,mul0(f[i+1][j],r-(i+1)))));
		}
		return res;
	}
	int solve(){
		int res=0;
		for(int j=1;j<=m;j++){
			int pre=1;
			for(int i=1;i<=n;i++){
				if(a[i][j]==1)add1(res,calc(pre,i-1,j)),pre=i+1;
			}
			add1(res,calc(pre,n,j));
		}
		return res*F;
	}
}
signed main(){
	freopen("plant.in","r",stdin);
	freopen("plant.out","w",stdout);
	std::ios::sync_with_stdio(false);cin.tie(nullptr);
	cin>>T>>id;while(T--){
		cin>>n>>m>>C>>F;
		for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)
			a[i][j]=(get<char>()=='1');
		for(int i=1;i<=n;i++){
			f[i][m]=0;
			for(int j=m-1;j>=1;j--)
				if(a[i][j+1]==0)f[i][j]=f[i][j+1]+1;
				else f[i][j]=0;
		}
//		for(int i=1;i<=n;i++,cout<<'\n')
//			for(int j=1;j<=m;j++)
//				cout<<f[i][j]<<' ';
		cout<<_C::solve()<<' '<<_F::solve()<<'\n';
	}
	return 0;
}