#include <bits/stdc++.h>
using namespace std;
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
int d[400][400], f[400][400], c[400][400], dd[400], n, t, g[400][400],
    k[400][400];
vector<int> a[400];
deque<pair<int, int> > s;
bool kt(int x, int y) { return (x <= n && y <= n && x >= 1 && y >= 1); }
bool timluong(int x, int y) {
  for (int i = 1; i <= 3 * n * n + 3; i++) dd[i] = -1;
  dd[x] = 0;
  deque<int> ss;
  ss.push_back(x);
  while (!ss.empty()) {
    int uu = ss.front();
    ss.pop_front();
    if (uu == y) return true;
    for (int i = 0; i < a[uu].size(); i++) {
      if (dd[a[uu][i]] == -1 && f[uu][a[uu][i]] < c[uu][a[uu][i]]) {
        dd[a[uu][i]] = uu;
        ss.push_back(a[uu][i]);
      }
    }
  }
  return false;
}
void tangluong(int x, int y) {
  int hh = y, min1 = 1e9 + 2;
  while (dd[hh] != 0) {
    min1 = min(min1, c[dd[hh]][hh] - f[dd[hh]][hh]);
    hh = dd[hh];
  }
  hh = y;
  while (dd[hh] != 0) {
    f[dd[hh]][hh] += min1;
    f[hh][dd[hh]] -= min1;
    hh = dd[hh];
  }
}
int answer() {
  int x = 3 * n * n + 2, sum = 0;
  for (int i = 0; i < a[x].size(); i++) {
    sum += f[a[x][i]][x];
  }
  return sum;
}
void bfs() {
  while (!s.empty()) {
    pair<int, int> uu = s.front();
    s.pop_front();
    for (int i = 0; i <= 3; i++) {
      if (kt(uu.first + dx[i], uu.second + dy[i]) &&
          d[uu.first + dx[i]][uu.second + dy[i]] == 1e9 &&
          !k[uu.first + dx[i]][uu.second + dy[i]]) {
        d[uu.first + dx[i]][uu.second + dy[i]] = d[uu.first][uu.second] + 1;
        s.push_back(pair<int, int>(uu.first + dx[i], uu.second + dy[i]));
      }
    }
  }
}
void bfs1(int x, int y) {
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) g[i][j] = -1;
  s.push_back(pair<int, int>(x, y));
  g[x][y] = 0;
  while (!s.empty()) {
    pair<int, int> uu = s.front();
    s.pop_front();
    a[n * (x - 1) + y].push_back(n * (uu.first - 1) + uu.second + 2 * n * n);
    a[n * (uu.first - 1) + uu.second + 2 * n * n].push_back(n * (x - 1) + y);
    c[n * (x - 1) + y][n * (uu.first - 1) + uu.second + 2 * n * n] = 1e9;
    if (d[uu.first][uu.second] == g[uu.first][uu.second]) continue;
    for (int i = 0; i <= 3; i++) {
      if (kt(uu.first + dx[i], uu.second + dy[i]) &&
          g[uu.first + dx[i]][uu.second + dy[i]] == -1 &&
          !k[uu.first + dx[i]][uu.second + dy[i]] &&
          d[uu.first + dx[i]][uu.second + dy[i]] >=
              g[uu.first][uu.second] + 1 &&
          g[uu.first][uu.second] + 1 <= t) {
        g[uu.first + dx[i]][uu.second + dy[i]] = g[uu.first][uu.second] + 1;
        s.push_back(pair<int, int>(uu.first + dx[i], uu.second + dy[i]));
      }
    }
  }
}
int main() {
  scanf("%d%d", &n, &t);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) d[i][j] = 1e9;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      char r;
      int x = i, y = j;
      cin >> r;
      stringstream cnv;
      if (r == 'Y') {
        k[x][y] = true;
        continue;
      }
      if (r == 'Z') {
        d[x][y] = 0;
        s.push_back(pair<int, int>(x, y));
        continue;
      }
      int gg;
      cnv << r;
      cnv >> gg;
      a[3 * n * n + 1].push_back(n * (x - 1) + y);
      a[n * (x - 1) + y].push_back(3 * n * n + 1);
      c[3 * n * n + 1][n * (x - 1) + y] = gg;
    }
  bfs();
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      char r;
      cin >> r;
      stringstream cnv;
      if (r == 'Y') {
        continue;
      }
      if (r == 'Z') {
        continue;
      }
      int gg, x = i, y = j;
      cnv << r;
      cnv >> gg;
      bfs1(i, j);
      a[n * (x - 1) + y + 2 * n * n].push_back(n * (x - 1) + y + n * n);
      a[n * (x - 1) + y + n * n].push_back(n * (x - 1) + y + 2 * n * n);
      c[n * (x - 1) + y + 2 * n * n][n * (x - 1) + y + n * n] = gg;
    }
  for (int i = 1; i <= n * n; i++) {
    a[i + n * n].push_back(3 * n * n + 2);
    a[3 * n * n + 2].push_back(i + n * n);
    c[i + n * n][3 * n * n + 2] = 1e9;
  }
  while (timluong(3 * n * n + 1, 3 * n * n + 2))
    tangluong(3 * n * n + 1, 3 * n * n + 2);
  cout << answer();
}
