#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef string str;

#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(x) (x).begin(), (x).end()
#define len(x) ((int)(x).size())

#define forn(i, n) for (int i = 0; i < (int)(n); ++i)
#define forr(i, l, r) for (int i = (int)(l); i <= (int)(r); ++i)
#define ford(i, r, l) for (int i = (int)(r); i >= (int)(l); --i)

#define cmin(a, b) a = min(a, b)
#define cmax(a, b) a = max(a, b)

const ll INF = 1e18;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    // freopen("CAU4_17.INP", "r", stdin);
    // freopen("CAU4_17.OUT", "w", stdout);

    int m, n, d, r;
    ll h;
    if (!(cin >> m >> n >> d >> r >> h)) return 0;

    vector<vll> P(m + 1, vll(n + 1, 0));

    forr(i, 1, m) {
        forr(j, 1, n) {
            ll val;
            cin >> val;
            ll cost = abs(val - h);
            P[i][j] = cost + P[i - 1][j] + P[i][j - 1] - P[i - 1][j - 1];
        }
    }

    ll min_cost = INF;

    auto get_sum = [&](int x1, int y1, int x2, int y2) {
        return P[x2][y2] - P[x1 - 1][y2] - P[x2][y1 - 1] + P[x1 - 1][y1 - 1];
    };

    if (r <= m && d <= n) {
        forr(i, r, m) {
            forr(j, d, n) {
                ll current_cost = get_sum(i - r + 1, j - d + 1, i, j);
                cmin(min_cost, current_cost);
            }
        }
    }

    if (d <= m && r <= n) {
        forr(i, d, m) {
            forr(j, r, n) {
                ll current_cost = get_sum(i - d + 1, j - r + 1, i, j);
                cmin(min_cost, current_cost);
            }
        }
    }

    if (min_cost == INF) {
        cout << -1 << "\n";
    } else {
        cout << min_cost << "\n";
    }

    return 0;
}
