#include <bits/stdc++.h>
using namespace std;
const int MaxN = (int)2e2 + 10;
const int INF = (int)1e9;
const int MOD = 998244353;
int n, m;
char s[MaxN][MaxN];
int sums[2][MaxN][MaxN];
int dp[MaxN * MaxN];
int get(int sum[MaxN][MaxN], int xl, int yl, int xr, int yr) {
return sum[xr][yr] - sum[xl - 1][yr] - sum[xr][yl - 1] + sum[xl - 1][yl - 1];
}
int main() {
// freopen("input.txt", "r", stdin);
scanf("%d%d\n", &n, &m);
for (int i = 1; i <= n; ++i) {
scanf("%s", s[i] + 1);
for (int j = 1; j <= m; ++j) {
if ((i + j) % 2 == 0) {
sums[0][i][j] = (s[i][j] == '1');
sums[1][i][j] = (s[i][j] == '0');
} else {
sums[0][i][j] = (s[i][j] == '0');
sums[1][i][j] = (s[i][j] == '1');
}
for (int k = 0; k < 2; ++k) {
sums[k][i][j] += sums[k][i - 1][j];
sums[k][i][j] += sums[k][i][j - 1];
sums[k][i][j] -= sums[k][i - 1][j - 1];
}
}
}
for (int x = 1; x <= n; ++x) {
for (int y = 1; y <= m; ++y) {
for (int d = 1; x + d - 1 <= n && y + d - 1 <= m; ++d) {
{
int cor = get(sums[0], x, y, x + d - 1, y + d - 1);
dp[d * d - cor] = max(dp[d * d - cor], d);
}
{
int cor = get(sums[1], x, y, x + d - 1, y + d - 1);
dp[d * d - cor] = max(dp[d * d - cor], d);
}
}
}
}
for (int i = 1; i <= n * m; ++i) {
dp[i] = max(dp[i], dp[i - 1]);
}
int t;
scanf("%d", &t);
while (t --> 0) {
int ti;
scanf("%d", &ti);
if (ti > n * m) {
ti = n * m;
}
printf("%d\n", dp[ti]);
}
return 0;
}
ICAgICNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPiAKICAgICAKICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAgICAgCiAgICBjb25zdCBpbnQgTWF4TiA9IChpbnQpMmUyICsgMTA7CiAgICBjb25zdCBpbnQgSU5GID0gKGludCkxZTk7CiAgICBjb25zdCBpbnQgTU9EID0gOTk4MjQ0MzUzOwogICAgIAogICAgaW50IG4sIG07CiAgICBjaGFyIHNbTWF4Tl1bTWF4Tl07CiAgICBpbnQgc3Vtc1syXVtNYXhOXVtNYXhOXTsKICAgIGludCBkcFtNYXhOICogTWF4Tl07CiAgICAgCiAgICBpbnQgZ2V0KGludCBzdW1bTWF4Tl1bTWF4Tl0sIGludCB4bCwgaW50IHlsLCBpbnQgeHIsIGludCB5cikgewogICAgCXJldHVybiBzdW1beHJdW3lyXSAtIHN1bVt4bCAtIDFdW3lyXSAtIHN1bVt4cl1beWwgLSAxXSArIHN1bVt4bCAtIDFdW3lsIC0gMV07CiAgICB9CiAgICAgCiAgICBpbnQgbWFpbigpIHsKICAgIC8vCWZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgCXNjYW5mKCIlZCVkXG4iLCAmbiwgJm0pOwogICAgCWZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgCQlzY2FuZigiJXMiLCBzW2ldICsgMSk7CiAgICAJCWZvciAoaW50IGogPSAxOyBqIDw9IG07ICsraikgewogICAgCQkJaWYgKChpICsgaikgJSAyID09IDApIHsKICAgIAkJCQlzdW1zWzBdW2ldW2pdID0gKHNbaV1bal0gPT0gJzEnKTsKICAgIAkJCQlzdW1zWzFdW2ldW2pdID0gKHNbaV1bal0gPT0gJzAnKTsKICAgIAkJCX0gZWxzZSB7CiAgICAJCQkJc3Vtc1swXVtpXVtqXSA9IChzW2ldW2pdID09ICcwJyk7CiAgICAJCQkJc3Vtc1sxXVtpXVtqXSA9IChzW2ldW2pdID09ICcxJyk7CiAgICAJCQl9CiAgICAJCQlmb3IgKGludCBrID0gMDsgayA8IDI7ICsraykgewogICAgCQkJCXN1bXNba11baV1bal0gKz0gc3Vtc1trXVtpIC0gMV1bal07CiAgICAJCQkJc3Vtc1trXVtpXVtqXSArPSBzdW1zW2tdW2ldW2ogLSAxXTsKICAgIAkJCQlzdW1zW2tdW2ldW2pdIC09IHN1bXNba11baSAtIDFdW2ogLSAxXTsKICAgIAkJCX0KICAgIAkJfQogICAgCX0KICAgIAlmb3IgKGludCB4ID0gMTsgeCA8PSBuOyArK3gpIHsKICAgIAkJZm9yIChpbnQgeSA9IDE7IHkgPD0gbTsgKyt5KSB7CiAgICAJCQlmb3IgKGludCBkID0gMTsgeCArIGQgLSAxIDw9IG4gJiYgeSArIGQgLSAxIDw9IG07ICsrZCkgewogICAgCQkJCXsKICAgIAkJCQkJaW50IGNvciA9IGdldChzdW1zWzBdLCB4LCB5LCB4ICsgZCAtIDEsIHkgKyBkIC0gMSk7CiAgICAJCQkJCWRwW2QgKiBkIC0gY29yXSA9IG1heChkcFtkICogZCAtIGNvcl0sIGQpOwogICAgCQkJCX0KICAgIAkJCQl7CiAgICAJCQkJCWludCBjb3IgPSBnZXQoc3Vtc1sxXSwgeCwgeSwgeCArIGQgLSAxLCB5ICsgZCAtIDEpOwogICAgCQkJCQlkcFtkICogZCAtIGNvcl0gPSBtYXgoZHBbZCAqIGQgLSBjb3JdLCBkKTsKICAgIAkJCQl9CiAgICAJCQl9CiAgICAJCX0KICAgIAl9CiAgICAJZm9yIChpbnQgaSA9IDE7IGkgPD0gbiAqIG07ICsraSkgewogICAgCQlkcFtpXSA9IG1heChkcFtpXSwgZHBbaSAtIDFdKTsKICAgIAl9CiAgICAJaW50IHQ7CiAgICAJc2NhbmYoIiVkIiwgJnQpOwogICAgCXdoaWxlICh0IC0tPiAwKSB7CiAgICAJCWludCB0aTsKICAgIAkJc2NhbmYoIiVkIiwgJnRpKTsKICAgIAkJaWYgKHRpID4gbiAqIG0pIHsKICAgIAkJCXRpID0gbiAqIG07CiAgICAJCX0KICAgIAkJcHJpbnRmKCIlZFxuIiwgZHBbdGldKTsKICAgIAl9CiAgICAJcmV0dXJuIDA7CiAgICB9CiAgICAg