rt。
#include <cstdio>
#define LL long long
const int N = 1e3 + 5;
const LL Mod = 998244353;
LL T, id, n, m, c, f, a[N][N], b[N][N], p[N][N], pp[N][N], ans1, ans2;
char map[N][N];
int main() {
scanf("%lld %lld", &T, &id);
while (T--) {
scanf("%lld %lld %lld %lld", &n, &m, &c, &f);
for (int i = 1; i <= n; i++) {
scanf("\n");
for (int j = 1; j <= m; j++)
map[i][j] = getchar();
}
m++;
for (int i = 1; i <= n; i++)
map[i][m] = '1';
n++;
for (int i = 1; i <= m; i++)
map[n][i] = '1';
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
a[i][j] = b[i][j] = p[i][j] = pp[i][j] = 0;
for (int i = n; i; i--)
for (int j = m; j; j--)
if (map[i][j] == '1')
a[i][j] = i, b[i][j] = j;
else
a[i][j] = a[i + 1][j], b[i][j] = b[i][j + 1];
m--, n--;
for (int i = 1; i <= m; i++)
for (int j = n; j; j--)
p[j][i] = ((b[j][i] - i - 1) * (map[j][i] == '0') + p[j + 1][i]) % Mod, pp[j][i] = ((b[j][i] - i - 1) * (n - j) * (map[j][i] == '0') % Mod + pp[j + 1][i]) % Mod;
ans1 = ans2 = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) {
if (a[i][j] > i + 2 && b[i][j] > j + 1)
(ans1 += ((b[i][j] - j - 1 + Mod) % Mod) * ((p[i + 2][j] - p[a[i][j]][j] + Mod) % Mod) % Mod) %= Mod;
if (a[i][j] > i + 3 && b[i][j] > j + 1)
(ans2 += ((b[i][j] - j - 1 + Mod) % Mod) * (((pp[i + 2][j] - pp[a[i][j]][j] + Mod) % Mod - ((p[i + 2][j] - p[a[i][j]][j] + Mod) % Mod) * (n + 1 - a[i][j]) % Mod + Mod) % Mod) % Mod) %= Mod;
}
printf("%lld %lld\n", ans1 * c, ans2 * f);
}
return 0;
}