#include <bits/stdc++.h>
using namespace std;
const int MAXN = 305;
int n, m;
int a[MAXN][MAXN], b[MAXN][MAXN];
map<int, int> colortrs;
int cn = 1;
int size[MAXN * MAXN * 2], fa[MAXN * MAXN * 2];
int cur[MAXN * MAXN * 2];
int getfa(int p) {
  if (fa[p] == p) return p;
  size[fa[p]] += size[p];
  size[p] = 0;
  return fa[p] = getfa(fa[p]);
}
struct Place {
  int x, y;
};
Place q[MAXN * MAXN];
int ql = 0, qr = -1;
long long ans = 0;
int x, y;
vector<Place> pai[MAXN * MAXN * 2];
inline int Abs(int x) {
  if (x > 0) return x;
  return -x;
}
inline bool cmp(const Place &a, const Place &b) {
  int d1 = max(Abs(a.x - x), Abs(a.y - y)),
      d2 = max(Abs(b.x - x), Abs(b.y - y));
  if (d1 != d2) return d1 < d2;
  int M = 1000000;
  int c1, c2;
  if (a.x - x == -d1 && a.y - y != -d1) c1 = M + a.y;
  if (a.y - y == d1 && a.x - x != -d1) c1 = 2 * M + a.x;
  if (a.x - x == d1 && a.y - y != d1) c1 = 3 * M - a.y;
  if (a.y - y == -d1 && a.x - x != d1) c1 = 4 * M - a.x;
  if (b.x - x == -d2 && b.y - y != -d2) c2 = M + b.y;
  if (b.y - y == d2 && b.x - x != -d2) c2 = 2 * M + b.x;
  if (b.x - x == d2 && b.y - y != d2) c2 = 3 * M - b.y;
  if (b.y - y == -d2 && b.x - x != d2) c2 = 4 * M - b.x;
  return c1 < c2;
}
int main() {
  scanf("%d%d", &n, &m);
  colortrs[0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      scanf("%d", &a[i][j]);
      if (!colortrs.count(a[i][j])) colortrs[a[i][j]] = ++cn;
      a[i][j] = colortrs[a[i][j]];
    }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      scanf("%d", &b[i][j]);
      if (b[i][j] != -1 && !colortrs.count(b[i][j])) colortrs[b[i][j]] = ++cn;
      if (b[i][j] != -1) b[i][j] = colortrs[b[i][j]];
    }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (b[i][j] != -1) {
        Place t;
        t.x = i;
        t.y = j;
        pai[a[i][j]].push_back(t);
      }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) size[a[i][j]]++;
  for (int i = 1; i <= cn; i++) fa[i] = i, cur[i] = i;
  qr++;
  scanf("%d%d", &q[qr].x, &q[qr].y);
  while (ql <= qr) {
    x = q[ql].x, y = q[ql].y;
    ql++;
    int c1 = cur[getfa(a[x][y])], c2 = b[x][y];
    if (c1 != c2 && c1 != 1) {
      ans += size[getfa(a[x][y])];
      sort(pai[c1].begin(), pai[c1].end(), cmp);
      for (int i = 0; i < (int)pai[c1].size(); i++) q[++qr] = pai[c1][i];
      pai[c1].clear();
      if (getfa(a[x][y]) != getfa(b[x][y])) fa[getfa(a[x][y])] = getfa(b[x][y]);
      cur[getfa(a[x][y])] = c2;
    }
  }
  printf("%I64d\n", ans);
  return 0;
}
