#include <bits/stdc++.h>
using namespace std;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
vector<int> f, col, wlk;
int Find(int a) {
  if (f[a] == a) return a;
  int fa = Find(f[a]);
  f[a] = fa;
  return fa;
}
void Union(int a, int b) {
  int fa = Find(a);
  int fb = Find(b);
  if (fa == fb) return;
  wlk[fa] += wlk[fb];
  f[fb] = f[fa];
}
int main() {
  ios_base::sync_with_stdio(0);
  int n, m;
  cin >> n >> m;
  vector<vector<int> > pan(3 * n, vector<int>(3 * m, 0));
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j) cin >> pan[n + i][m + j];
  vector<vector<int> > sym(3 * n, vector<int>(3 * m, -1));
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j) cin >> sym[n + i][m + j];
  int x, y;
  cin >> x >> y;
  x = x - 1 + n;
  y = y - 1 + m;
  vector<vector<int> > spi(3 * n, vector<int>(3 * m));
  spi[x][y] = 0;
  int nr = 1, ileMam = 1, d = 1;
  int akt_x = x, akt_y = y;
  while (ileMam < 9 * n * m) {
    for (int kier = 0; kier < 4; ++kier) {
      for (int i = 0; i < d; ++i) {
        akt_x += dx[kier];
        akt_y += dy[kier];
        if (akt_x >= 0 && akt_x < 3 * n && akt_y >= 0 && akt_y < 3 * m) {
          spi[akt_x][akt_y] = nr;
          ++ileMam;
        }
        ++nr;
      }
      if (kier == 1 || kier == 3) ++d;
    }
  }
  map<int, vector<pair<int, pair<int, int> > > > M;
  map<int, pair<int, int> > gdzieCol;
  for (int i = 0; i < 3 * n; ++i) {
    for (int j = 0; j < 3 * m; ++j) {
      gdzieCol[pan[i][j]] = make_pair(i, j);
      M[pan[i][j]].push_back(make_pair(-1, make_pair(i, j)));
      int H = i * 3 * m + j;
      f.push_back(H);
      col.push_back(pan[i][j]);
      wlk.push_back(1);
      if (M.find(pan[i][j]) != M.end()) {
        int Hroot = (M[pan[i][j]][0]).second.first * 3 * m +
                    (M[pan[i][j]][0]).second.second;
        Union(Hroot, H);
      }
    }
  }
  long long odp = 0;
  queue<pair<int, int> > Q;
  Q.push(make_pair(x, y));
  while (!Q.empty()) {
    pair<int, int> akt = Q.front();
    Q.pop();
    int colPan = col[Find(akt.first * 3 * m + akt.second)];
    int colSym = sym[akt.first][akt.second];
    if (colPan == 0 || colPan == colSym) continue;
    if (M[colPan].size() != 0) {
      for (int i = 0; i < M[colPan].size(); ++i) {
        int wx = akt.first - x;
        int wy = akt.second - y;
        wx *= -1;
        wy *= -1;
        M[colPan][i].first = spi[M[colPan][i].second.first + wx]
                                [M[colPan][i].second.second + wy];
      }
      sort(M[colPan].begin(), M[colPan].end());
      for (int i = 0; i < M[colPan].size(); ++i)
        if ((M[colPan][i].second.first != x ||
             M[colPan][i].second.second != y) &&
            sym[M[colPan][i].second.first][M[colPan][i].second.second] != -1)
          Q.push(M[colPan][i].second);
      M[colPan].clear();
    }
    odp += wlk[Find(akt.first * 3 * m + akt.second)];
    if (gdzieCol.find(colSym) != gdzieCol.end() && gdzieCol[colSym].first != -1)
      Union(gdzieCol[colSym].first * 3 * m + gdzieCol[colSym].second,
            akt.first * 3 * m + akt.second);
    else {
      col[Find(akt.first * 3 * m + akt.second)] = colSym;
      gdzieCol[colSym] = akt;
    }
    gdzieCol[colPan] = make_pair(-1, -1);
  }
  cout << odp;
  return 0;
}
