#include <iostream>
#include <set>
#include <map>

using namespace std;

const int NMAX = 40;

int N, M, K, L;
int a, b, c, d;
int cub[NMAX][NMAX][NMAX][NMAX];

set < pair <int, int> > qi[NMAX][NMAX][NMAX], qj[NMAX][NMAX][NMAX], qk[NMAX][NMAX][NMAX], ql[NMAX][NMAX][NMAX];


void citeste() {
	cin >> N >> M >> K >> L;
	cin >> 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++) {
					cin >> cub[i][j][k][l];
					/*s[i][j][k][l] = 
						cub[i][j][k][l] +
						s[i - 1][j][k][l] +
						s[i][j - 1][k][l] +
						s[i][j][k - 1][l] +
						s[i][j][k][l - 1] -
						3 * s[i - 1][j - 1][k - 1][l - 1];*/
				}
}

int get_crt(int i, int j, int k, int l) {
	set < pair <int, int> > :: iterator it;
	int sol;
	it = qi[j][k][l].begin();
	sol = (-1) * (*it).first;

	it = qj[i][k][l].begin();
	sol = max(sol, (-1) * (*it).first);
	
	it = qk[i][j][l].begin();
	sol = max(sol, (-1) * (*it).first);
	
	it = ql[i][j][k].begin();
	sol = max(sol, (-1) * (*it).first);

	return sol;
}

void rezolva() {
	int sol = cub[1][1][1][1];
	pair <int, int> p;
	for (int i = 1; i <= a; i++)
		for (int j = 1; j <= b; j++)
			for (int l = 1; l <= c; l++)
				for (int k = 1; k <= d; k++) {
					p.second = i;
					p.first = (-1) * cub[i][j][k][l];
					qi[j][k][l].insert(p);
					p.second = j;
					qj[i][k][l].insert(p);
					p.second = k;
					qk[i][j][l].insert(p);
					p.second = l;
					ql[i][j][k].insert(p);

					sol = min(sol, get_crt(i, j, k, l));
				}

	set < pair <int, int> > :: iterator it;

	for (int i = a; i <= N; i++)
		for (int j = b; j <= M; j++)
			for (int k = c; k <= K; k++)
				for (int l = d; l <= L; l++) {
					p.first = (-1) * cub[i][j][k][l];
					if (i != a) {
						p.second = i;
						it = qi[j][k][l].find(p);
						if (it != qi[j][k][l].end()) qi[j][k][l].erase(it);
					}


					if (j != b) {
						p.second = j;
						it = qj[i][k][l].find(p);
						if (it != qj[i][k][l].end()) qj[i][k][l].erase(it);
					}
					if (k != c) {
						p.second = k;
						it = qk[i][j][l].find(p);
						if (it != qk[i][j][l].end()) qk[i][j][l].erase(it);
					}
					if (l != d) {
						p.second = l;
						it = ql[i][j][k].find(p);
						if (it != ql[i][j][k].end()) ql[i][j][k].erase(it);
					}

					
					qi[j][k][l].insert(p);
					p.second = j;
					qj[i][k][l].insert(p);
					p.second = k;
					qk[i][j][l].insert(p);
					p.second = l;
					ql[i][j][k].insert(p);
					
					sol = min(sol, get_crt(i, j, k, l));

				}


	cout << sol << '\n';
}



int main() {
	citeste();
	rezolva();
	return 0;
}