#include #define forn(i, n) for (int i = 0; i < (int)(n); i++) #define for1(i, n) for (int i = 1; i < (int)(n); i++) #define fore(i, l, r) for (int i = (int)(l); i <= (int)(r); i++) #define ford(i, n) for (int i = (int)(n) - 1; i >= 0; i--) #define pb push_back #define eb emplace_back #define fi first #define se second #define mp make_pair #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() using namespace std; using namespace std::chrono; typedef long long ll; typedef vector vi; typedef vector vll; typedef vector vvi; typedef vector vvll; typedef set si; typedef pair pii; typedef set spii; typedef spii::iterator siter; int main() { int T, L, C; int temp; // auto start = std::chrono::steady_clock::now(); scanf("%d", &T); for (int t = 0; t < T; ++t) { vector bef; vector aft; scanf("%d %d", &L, &C); for (int i = 0; i < L; ++i) { for (int j = 0; j < C; ++j) { scanf("%d", &temp); if (temp) bef.eb(i, j); } } for (int i = 0; i < L; ++i) { for (int j = 0; j < C; ++j) { scanf("%d", &temp); if (temp) aft.eb(i, j); } } vvi dis(2000); int max = 0; for (int i = 0; i < 2000; i++) { dis[i].resize(2000); } for (pii e1: bef) { for (pii e2: aft) { temp = ++(dis[(e2.first - e1.first + 1000)][e2.second - e1.second + 1000]); if (temp > max) max = temp; } } printf("%d\n", max); } // auto end = std::chrono::steady_clock::now(); // duration f = end - start; // cout << "\nTime: " << f.count(); return 0; }