#include <bits/stdc++.h>
int oo[1 + (300 * 300)], oh[1 + (300 * 300)];
int link(int o, int h) {
  static int _ = 1;
  oo[_] = o, oh[_] = h;
  return _++;
}
int aa[(300 * 300) * 2], n, m;
int compare_a(const void *a, const void *b) {
  int h1 = *(int *)a;
  int h2 = *(int *)b;
  return aa[h1] - aa[h2];
}
int spiral(int i, int j) {
  if (i < 0 && j > i && j <= -i)
    return (-i * 2 - 1) * (-i * 2 - 1) + -i * 0 + j - 1 - i;
  else if (j > 0 && i > -j && i <= j)
    return (j * 2 - 1) * (j * 2 - 1) + j * 2 + i - 1 + j;
  else if (i > 0 && j < i && j >= -i)
    return (i * 2 - 1) * (i * 2 - 1) + i * 4 + i - 1 - j;
  else if (j < 0 && i < -j && i >= j)
    return (-j * 2 - 1) * (-j * 2 - 1) + -j * 6 + -j - 1 - i;
  return 0;
}
int io, jo;
int compare_spiral(const void *a, const void *b) {
  int ij1 = *(int *)a, i1 = ij1 / m, j1 = ij1 % m;
  int ij2 = *(int *)b, i2 = ij2 / m, j2 = ij2 % m;
  return spiral(i1 - io, j1 - jo) - spiral(i2 - io, j2 - jo);
}
int dsu[(300 * 300)], color[(300 * 300)];
int find(int i) { return dsu[i] < 0 ? i : (dsu[i] = find(dsu[i])); }
void join(int i, int j) {
  i = find(i);
  j = find(j);
  if (i == j) return;
  if (dsu[i] > dsu[j])
    dsu[i] = j;
  else {
    if (dsu[i] == dsu[j]) dsu[i]--;
    dsu[j] = i;
  }
}
int main() {
  static int gg[(300 * 300) * 2], hh[(300 * 300)], qu[(300 * 300)],
      rep[((300 * 300) * 2 + 1)], sz[((300 * 300) * 2 + 1)],
      ae[((300 * 300) * 2 + 1)];
  int nm, k, g, h, i, j, i_, j_, head, cnt;
  long long ans;
  scanf("%d%d", &n, &m), nm = n * m;
  for (g = 0; g < nm * 2; g++) {
    scanf("%d", &aa[g]);
    gg[g] = g;
  }
  qsort(gg, nm * 2, sizeof *gg, compare_a);
  for (g = 0, k = 1; g < nm * 2; g++)
    if (aa[gg[g]] > 0)
      aa[gg[g]] = g + 1 == nm * 2 || aa[gg[g + 1]] != aa[gg[g]] ? k++ : k;
  for (h = 0; h < nm; h++) color[h] = aa[h], sz[aa[h]]++;
  memset(rep, -1, k * sizeof *rep);
  memset(dsu, -1, nm * sizeof *dsu);
  for (h = 0; h < nm; h++) {
    int a = aa[h];
    if (rep[a] != -1) join(rep[a], h);
    rep[a] = h;
  }
  scanf("%d%d", &i_, &j_), i_--, j_--;
  for (i = 0; i < n; i++)
    for (j = 0; j < m; j++)
      if ((i != i_ || j != j_) && aa[nm + i * m + j] != -1) {
        int a = aa[i * m + j];
        ae[a] = link(ae[a], i * m + j);
      }
  ans = 0, head = cnt = 0;
  qu[head + cnt++] = i_ * m + j_;
  while (cnt) {
    int a, b, o, cnt_;
    h = qu[cnt--, head++], i = h / m, j = h % m, a = color[find(h)],
    b = aa[nm + h];
    if (a == 0 || a == b) continue;
    if (rep[b] == -1)
      rep[b] = h;
    else
      join(h, rep[b]);
    color[find(h)] = b, rep[a] = -1;
    ans += sz[a], sz[b] += sz[a], sz[a] = 0;
    cnt_ = 0;
    for (o = ae[a]; o; o = oo[o]) hh[cnt_++] = oh[o];
    ae[a] = 0;
    io = i, jo = j;
    qsort(hh, cnt_, sizeof *hh, compare_spiral);
    for (g = 0; g < cnt_; g++) qu[head + cnt++] = hh[g];
  }
  printf("%lld\n", ans);
  return 0;
}
