#include <bits/stdc++.h>
using namespace std;
const int MAXN = 300;
vector<pair<int, int> > items[MAXN * MAXN + 10];
int cnt[MAXN * MAXN + 10];
int f[MAXN * MAXN + 10];
int rowN, colN;
int color[MAXN + 10][MAXN + 10], sym[MAXN + 10][MAXN + 10];
int getFather(int x) { return f[x] = f[x] == x ? x : getFather(f[x]); }
int getID(int x, int y) {
  swap(x, y);
  int offX = x > 0 ? x - 1 : x, offY = y >= 0 ? y : y + 1;
  int level = max(abs(offX), abs(offY));
  int start = (level * 2) * (level * 2);
  if (x - 1 == level) {
    return start + (level * 2 + 1) * 3 + y - (-level - 1);
  } else if (y == -level - 1) {
    return start + (level * 2 + 1) * 2 + x - (-level);
  } else if (x == -level) {
    return start + (level * 2 + 1) + level - y;
  } else
    return start + level + 1 - x;
}
pair<int, int> center;
bool cmp(pair<int, int> x, pair<int, int> y) {
  return getID(x.first - center.first, x.second - center.second) <
         getID(y.first - center.first, y.second - center.second);
}
int main() {
  scanf("%d%d", &rowN, &colN);
  vector<int> li;
  li.push_back(0);
  for (int i = 0; i < (rowN); i++)
    for (int j = 0; j < (colN); j++) {
      scanf("%d", &color[i][j]);
      li.push_back(color[i][j]);
    }
  for (int i = 0; i < (rowN); i++)
    for (int j = 0; j < (colN); j++) {
      scanf("%d", &sym[i][j]);
      if (sym[i][j] >= 0) {
        li.push_back(sym[i][j]);
      }
    }
  sort(li.begin(), li.end());
  li.erase(unique(li.begin(), li.end()), li.end());
  for (int i = 0; i < ((li).size()); i++) f[i] = i;
  for (int i = 0; i < (rowN); i++)
    for (int j = 0; j < (colN); j++) {
      color[i][j] = lower_bound(li.begin(), li.end(), color[i][j]) - li.begin();
      cnt[color[i][j]]++;
      if (sym[i][j] >= 0) {
        sym[i][j] = lower_bound(li.begin(), li.end(), sym[i][j]) - li.begin();
        items[color[i][j]].push_back(make_pair(i, j));
      }
    }
  int stX, stY;
  scanf("%d%d", &stX, &stY);
  stX--;
  stY--;
  queue<pair<int, int> > q;
  q.push(make_pair(stX, stY));
  long long ans = 0;
  while (!q.empty()) {
    pair<int, int> now = q.front();
    q.pop();
    int f1 = getFather(color[now.first][now.second]),
        f2 = sym[now.first][now.second];
    if (f1 && f1 != f2) {
      center = now;
      sort(items[f1].begin(), items[f1].end(), cmp);
      for (__typeof((items[f1]).begin()) i = (items[f1]).begin();
           i != (items[f1]).end(); ++i)
        if (*i != make_pair(stX, stY)) q.push(*i);
      items[f1].clear();
      f[f2] = f2;
      f[f1] = f2;
      cnt[f2] += cnt[f1];
      ans += cnt[f1];
      cnt[f1] = 0;
    }
  }
  cout << ans << endl;
  return 0;
}
