using namespace std;
const int N=31;
const int Mod=998244353;
int T,id,n,m,c,f;
char ans[N][N];
bool vis[N][N];
bool whec[N][N][N][N][N],whef[N][N][N][N][N][N];
int cntc,cntf;
void dfsc(int x1,int x2,int y0,int y1,int y2){
if(x2>n||y1>m||y2>m||x2-x1==1||y1==y0||y2==y0){
return;
}
if(whec[x1][x2][y0][y1][y2]) return;
whec[x1][x2][y0][y1][y2]=1;
bool f=1;
for(int i=y0;i<=y1;i++){
if(vis[x1][i]){
f=0;
break;
}
}
if(f){
for(int i=y0;i<=y2;i++){
if(vis[x2][i]){
f=0;
break;
}
}
}
if(f){
for(int i=x1;i<=x2;i++){
if(vis[i][y0]){
f=0;
break;
}
}
}
if(f){
cntc=(cntc+1)%Mod;
//cout<<x1<<" "<<x2<<" "<<y0<<" "<<y1<<" "<<y2<<endl;
}
dfsc(x1+1,x2,y0,y1,y2);
dfsc(x1,x2+1,y0,y1,y2);
dfsc(x1,x2,y0+1,y1,y2);
dfsc(x1,x2,y0,y1+1,y2);
dfsc(x1,x2,y0,y1,y2+1);
}
void dfsf(int x1,int x2,int x3,int y0,int y1,int y2){
if(x3>n||y1>m||y2>m||x2-x1==1||x3==x2||y1==y0||y2==y0){
return;
}
if(whef[x1][x2][x3][y0][y1][y2]) return;
whef[x1][x2][x3][y0][y1][y2]=1;
bool f=1;
for(int i=y0;i<=y1;i++){
if(vis[x1][i]){
f=0;
break;
}
}
if(f){
for(int i=y0;i<=y2;i++){
if(vis[x2][i]){
f=0;
break;
}
}
}
if(f){
for(int i=x1;i<=x3;i++){
if(vis[i][y0]){
f=0;
break;
}
}
}
if(f){
cntf=(cntf+1)%Mod;
//cout<<x1<<" "<<x2<<" "<<x3<<" "<<y0<<" "<<y1<<" "<<y2<<endl;
}
dfsf(x1+1,x2,x3,y0,y1,y2);
dfsf(x1,x2+1,x3,y0,y1,y2);
dfsf(x1,x2,x3+1,y0,y1,y2);
dfsf(x1,x2,x3,y0+1,y1,y2);
dfsf(x1,x2,x3,y0,y1+1,y2);
dfsf(x1,x2,x3,y0,y1,y2+1);
}
int main(){
cin>>T>>id;
while(T--){
memset(vis,0,sizeof(vis));
cin>>n>>m>>c>>f;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>ans[i][j];
if(ans[i][j]=='1') vis[i][j]=1;
}
}
if(c==0&&f==0){
cout<<"0 0"<<endl;
continue;
}
cntc=0;
if(!c) cout<<"0 ";
else{
dfsc(1,3,1,2,2);
cout<<cntc<<" ";
}
if(!f){
cout<<0<<endl;
continue;
}
cntf=0;
dfsf(1,3,4,1,2,2);
cout<<cntf<<endl;
}
return 0;
}