#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pdd pair<ld, ld>
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second

const int NMAX = 37;

int v[NMAX][NMAX][NMAX][NMAX];

int main() {
    srand(time(0));
    cin.sync_with_stdio(false);

    int N, M, K, L;
    int a, b, c, d;

    scanf("%d%d%d%d", &N, &M, &K, &L);
    scanf("%d%d%d%d", &a, &b, &c, &d);

    for (int i = 1; i <= N; i++)
        for (int j = 1; j <= M; j++)
            for (int k = 1; k <= K; k++)
                for (int l = 1; l <= L; l++)
                    scanf("%d", &v[i][j][k][l]);

    int sol = 1 << 30;
    int CC = 0;
    for (int t = 1; t <= 60;) {
        int A = 1, B = 1, C = 1, D = 1;
        for (int nr = 1; nr <= 5; nr++) {
            A = rand() % N + 1;
            B = rand() % M + 1;
            C = rand() % K + 1;
            D = rand() % L + 1;
            if (A + a - 1 <= N && B + b - 1 <= M && C + c - 1 <= K && D + d - 1 <= L)
                break;
        }

        if (A + a - 1 <= N && B + b - 1 <= M && C + c - 1 <= K && D + d - 1 <= L) {
            int mlc = 1 << 30;
            mlc = -mlc;
            for (int i = A; i <= A + a - 1; i++)
                for (int j = B; j <= B + b - 1; j++)
                    for (int k = C; k <= C + c - 1; k++)
                        for (int l = D; l <= D + d - 1; l++)
                            mlc = max(mlc, v[i][j][k][l]);

            sol = min(sol, mlc);
            t++;
        }

        if (++CC == 10000000)
            break;
    }

    printf("%d\n", sol);

    return 0;
}