20分求调
#include<bits/stdc++.h>
using namespace std;
int dp[505][505][305];
int n, m, x;
char a[505][505];
int main() {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int t;
cin >> t;
while (t--) {
cin >> n >> m >> x;
memset(dp, 0, sizeof dp);
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
cin >> a[i][j];
}
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
for (int k = 0; k <= x; ++k) {
if (a[i][j] == '0') {
dp[i][j][k] = max(dp[i][j][k], max(dp[i - 1][j][k], dp[i][j - 1][k]));
} else if (a[i][j] == '1') {
dp[i][j][k] = max(dp[i][j][k], max(dp[i - 1][j][k], dp[i][j - 1][k]) + 1) ;
} else if (k >= 1) {
dp[i][j][k] = max(dp[i][j][k], max(dp[i - 1][j][k - 1], dp[i][j - 1][k - 1]) + 1);
}
}
}
}
int ans = 0;
for (int i = 0; i <= x; ++i) {
ans = max(ans, dp[n][m][i]);
}
cout << ans << '\n';
}
return 0;
}