#include <bits/stdc++.h>
using namespace std;
struct w {
  int c, mi;
} tr[1010 * 1010 * 8];
struct ww {
  int h, b, l, r, x, y;
} c[1010 * 1010];
int i, j, k, n, m, s, vx, vy, t, ans;
int a[1010][1010], b[1010][1010];
double d[1010 * 1010];
long long an;
inline bool cc1(const ww &a, const ww &b) { return a.b > b.b; }
inline void update(int x) { tr[x].mi = min(tr[x * 2].mi, tr[x * 2 + 1].mi); }
inline void Cover(int x, int y) {
  tr[x].c = max(tr[x].c, y);
  tr[x].mi = max(tr[x].mi, y);
}
inline void renew(int x) {
  if (tr[x].c) Cover(x * 2, tr[x].c), Cover(x * 2 + 1, tr[x].c);
  tr[x].c = 0;
}
void cover(int q, int x, int y, int l, int r, int h) {
  if (l <= x && y <= r) {
    Cover(q, h);
    return;
  }
  renew(q);
  int mid = (x + y) / 2;
  if (l <= mid) cover(q * 2, x, mid, l, r, h);
  if (mid < r) cover(q * 2 + 1, mid + 1, y, l, r, h);
  update(q);
}
void cal(int q, int x, int y, int l, int r) {
  if (l <= x && y <= r) {
    ans = min(ans, tr[q].mi);
    return;
  }
  renew(q);
  int mid = (x + y) / 2;
  if (l <= mid) cal(q * 2, x, mid, l, r);
  if (mid < r) cal(q * 2 + 1, mid + 1, y, l, r);
}
int main() {
  scanf("%d%d%d", &n, &vx, &vy);
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++) scanf("%d", &a[i][j]);
  vx = -vx, vy = -vy;
  if (vx < 0) {
    vx = -vx;
    for (j = 1; j <= n; j++)
      for (i = 1; i <= n / 2; i++) swap(a[i][j], a[n - i + 1][j]);
  }
  if (vy < 0) {
    vy = -vy;
    for (i = 1; i <= n; i++)
      for (j = 1; j <= n / 2; j++) swap(a[i][j], a[i][n - j + 1]);
  }
  if (!vx) {
    swap(vx, vy);
    for (i = 1; i <= n; i++)
      for (j = 1; j <= n; j++) b[i][j] = a[i][j];
    for (i = 1; i <= n; i++)
      for (j = 1; j <= n; j++) a[j][n - i + 1] = b[i][j];
  }
  sort(d + 1, d + t + 1);
  for (i = 1; i <= t; i++)
    if (!m || d[m] < d[i]) d[++m] = d[i];
  double ay = 1. * vy / vx;
  for (i = 0; i <= n; i++)
    for (j = 0; j <= n; j++) d[++m] = j - i * ay;
  sort(d + 1, d + m + 1);
  for (i = 1; i <= m; i++)
    if (!t || d[t] + (1e-9) < d[i]) d[++t] = d[i];
  for (i = 1; i <= n; i++)
    for (j = 0; j <= n - 1; j++) {
      int l = lower_bound(d + 1, d + t + 1, j - i * ay - (1e-9)) - d;
      int r = lower_bound(d + 1, d + t + 1, j + 1 - (i - 1) * ay - (1e-9)) - d;
      c[++s] = (ww){a[i][j + 1], i + j, l * 2, r * 2};
    }
  m = t * 2;
  sort(c + 1, c + s + 1, cc1);
  for (i = 1; i <= s; i++) {
    ans = 2000000000;
    cal(1, 1, m, c[i].l, c[i].r);
    if (ans < c[i].h) an += c[i].h - ans;
    cover(1, 1, m, c[i].l, c[i].r, c[i].h);
  }
  printf("%I64d\n", an);
  return 0;
}
