#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
const int M = 998244353;
bool a[N][N];
int n,m,c,f;
int bl1[N][N],bl2[N][N],bl3[N][N];
void work1()
{
memset(bl1,0,sizeof bl1);
memset(bl2,0,sizeof bl2);
memset(bl3,0,sizeof bl3);
for (int i = 1; i <= n; i++)
for (int j = m; j >= 1; j--)
if (a[i][j] == 0)
{
bl1[i][j] = bl1[i][j + 1];
if (j + 1 <= m && a[i][j + 1] == 0) bl1[i][j]++;
}
for (int j = 1; j <= m; j++)
for (int i = n; i >= 1; i--)
if (a[i][j] == 0)
{
bl2[i][j] = bl1[i][j];
bl2[i][j] += bl2[i + 1][j];
}
for (int j = 1; j <= m; j++)
for (int i = n; i >= 1; i--)
if (a[i][j] == 0)
{
bl3[i][j] = bl3[i + 1][j];
if (i + 1 <= n && a[i + 1][j] == 0) bl3[i][j]++;
}
}
void work2()
{
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
bl3[i][j] *= bl1[i][j];
}
for (int j = 1; j <= m; j++)
for (int i = n; i >= 1; i--)
{
bl2[i][j] = bl3[i][j];
if (a[i + 1][j] == 0) bl2[i][j] += bl2[i + 1][j];
}
}
int main ()
{
int T,id;
scanf("%d%d",&T,&id);
while (T--)
{
scanf("%d%d%d%d",&n,&m,&c,&f);
memset(a,0,sizeof a);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
char ch;
scanf(" %c",&ch);
a[i][j] = ch - '0';
}
int ansc = 0,ansf = 0;
work1();
if (c != 0)
{
for (int i = 1; i <= n; i++)
for (int j = 1;j <= m; j++)
{
if (a[i + 1][j] == 0 && a[i + 2][j] == 0)ansc += bl1[i][j] * bl2[i + 2][j];
ansc %= M;
}
}
if (f != 0)
{
work2();
for (int i = 1; i <= n; i++)
for (int j = 1;j <= m; j++)
{
if (a[i + 1][j] == 0 && a[i + 2][j] == 0)ansf += bl1[i][j] * bl2[i + 2][j];
ansf %= M;
}
}
printf("%d %d\n",ansc,ansf);
}
return 0;
}