#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define all(x) x.begin(),x.end()
int n,m;
vector<pair<int,int> > p1,p2;
void solve(int ref,vector<vector<int> > &mat){
int mm[min(n,m)+7];
vector<pii> pp;
int dp[n][m];
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++){
int tr = ref;
for(int j=0;j<m;j++){
if(mat[i][j]!=tr) dp[i][j] = 1;
tr = 1 - tr;
}
}
for(int i=1;i<n;i++) dp[i][0]+=dp[i-1][0];
for(int j=1;j<m;j++) dp[0][j]+=dp[0][j-1];
for(int i=1;i<n;i++){
for(int j=1;j<m;j++) dp[i][j] += dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1];
}
for(int k=1;k<=min(n,m);k++) mm[k] = INT_MAX;
for(int k=1;k<=min(n,m);k++){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(i-k>=0 && j-k>=0){
int cost = dp[i][j] - dp[i-k][j] - dp[i][j-k] + dp[i-k][j-k];
mm[k] = min(mm[k],cost);
}
}
}
}
//Main part of the code
vector<pair<int,int> > px;
for(int k=1;k<=min(n,m);k++) px.push_back(make_pair(mm[k],k));
sort(all(px));
pp[0].first = 0;
for(int i=1;i<px.size();i++) px[i].second = max(px[i].second,px[i-1].second);
if(ref) p1 = px;
else p2 = px;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>n>>m;
vector<vector<int> > mat(n,vector<int>(m,0));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++) cin>>mat[i][j];
}
solve(0,mat);
solve(1,mat);
int q,x;
cin>>q;
while(q-->0)
{
cin>>x;
int ii1 = upper_bound(all(p1),make_pair(x,INT_MAX)) - p1.begin();
int ii2 = upper_bound(all(p2),make_pair(x,INT_MAX)) - p2.begin();
int mx = 1;
mx = max(mx,max(p1[ii1-1].second,p2[ii2-1].second));
cout<<mx<<'\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgcGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLHguZW5kKCkKCmludCBuLG07CnZlY3RvcjxwYWlyPGludCxpbnQ+ID4gcDEscDI7Cgp2b2lkIHNvbHZlKGludCByZWYsdmVjdG9yPHZlY3RvcjxpbnQ+ID4gJm1hdCl7CgogIGludCBtbVttaW4obixtKSs3XTsKICB2ZWN0b3I8cGlpPiBwcDsKICBpbnQgZHBbbl1bbV07CiAgbWVtc2V0KGRwLDAsc2l6ZW9mKGRwKSk7CiAgCiAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgCWludCB0ciA9IHJlZjsKICAJZm9yKGludCBqPTA7ajxtO2orKyl7CgkJaWYobWF0W2ldW2pdIT10cikgZHBbaV1bal0gPSAxOwoJCXRyID0gMSAtIHRyOwogIAl9CiAgfSAJCgogICBmb3IoaW50IGk9MTtpPG47aSsrKSBkcFtpXVswXSs9ZHBbaS0xXVswXTsgCiAgIGZvcihpbnQgaj0xO2o8bTtqKyspIGRwWzBdW2pdKz1kcFswXVtqLTFdOyAKICAgIAogICBmb3IoaW50IGk9MTtpPG47aSsrKXsKICAgCSAKICAgCSBmb3IoaW50IGo9MTtqPG07aisrKSBkcFtpXVtqXSArPSBkcFtpLTFdW2pdICsgZHBbaV1bai0xXSAtIGRwW2ktMV1bai0xXTsgIAogICAJIAogICB9IAogICAgCiAgIGZvcihpbnQgaz0xO2s8PW1pbihuLG0pO2srKykgbW1ba10gPSBJTlRfTUFYOwoKICAgIGZvcihpbnQgaz0xO2s8PW1pbihuLG0pO2srKyl7CiAgICAJCgkgICBmb3IoaW50IGk9MDtpPG47aSsrKXsKCSAKCQlmb3IoaW50IGo9MDtqPG07aisrKXsKCSAgCQkKCSAgCSAgaWYoaS1rPj0wICYmIGotaz49MCl7CgkgIAkgIAkgCgkgIAkgIAlpbnQgY29zdCA9IGRwW2ldW2pdIC0gZHBbaS1rXVtqXSAtIGRwW2ldW2ota10gKyBkcFtpLWtdW2ota107CgkgIAkgIAltbVtrXSA9IG1pbihtbVtrXSxjb3N0KTsKCSAgCSAgfQkKCSAgCQkgCQkKCQl9CQoJCQoJIH0gIAogICAgCQogICAgfQkKCQoJIC8vTWFpbiBwYXJ0IG9mIHRoZSBjb2RlCQoJIHZlY3RvcjxwYWlyPGludCxpbnQ+ID4gcHg7CgkgZm9yKGludCBrPTE7azw9bWluKG4sbSk7aysrKSBweC5wdXNoX2JhY2sobWFrZV9wYWlyKG1tW2tdLGspKTsgCQoJIHNvcnQoYWxsKHB4KSk7CgkgcHBbMF0uZmlyc3QgPSAwOwoJIGZvcihpbnQgaT0xO2k8cHguc2l6ZSgpO2krKykgcHhbaV0uc2Vjb25kICA9IG1heChweFtpXS5zZWNvbmQscHhbaS0xXS5zZWNvbmQpOyAKICAgICBpZihyZWYpIHAxID0gcHg7CiAgICAgZWxzZSBwMiA9IHB4Owp9CgoKaW50IG1haW4oKSB7CgkKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoJY2luLnRpZSgwKTsgY291dC50aWUoMCk7CgkKCWNpbj4+bj4+bTsKCXZlY3Rvcjx2ZWN0b3I8aW50PiA+IG1hdChuLHZlY3RvcjxpbnQ+KG0sMCkpOwoJCglmb3IoaW50IGk9MDtpPG47aSsrKXsKCSAgZm9yKGludCBqPTA7ajxtO2orKykgY2luPj5tYXRbaV1bal07CQoJfQoJCglzb2x2ZSgwLG1hdCk7Cglzb2x2ZSgxLG1hdCk7CgkKCWludCBxLHg7CgljaW4+PnE7Cgl3aGlsZShxLS0+MCkKCXsKCQkKCSAgY2luPj54OwkKCSAgaW50IGlpMSA9IHVwcGVyX2JvdW5kKGFsbChwMSksbWFrZV9wYWlyKHgsSU5UX01BWCkpIC0gcDEuYmVnaW4oKTsKCSAgaW50IGlpMiA9IHVwcGVyX2JvdW5kKGFsbChwMiksbWFrZV9wYWlyKHgsSU5UX01BWCkpIC0gcDIuYmVnaW4oKTsKCSAgaW50IG14ID0gMTsKCSAgbXggPSBtYXgobXgsbWF4KHAxW2lpMS0xXS5zZWNvbmQscDJbaWkyLTFdLnNlY29uZCkpOwoJICBjb3V0PDxteDw8J1xuJzsKCX0KCQoJcmV0dXJuIDA7Cn0=