#include #include #include #include using namespace std; const int MAX_N = 40; int A[MAX_N][MAX_N][MAX_N][MAX_N]; int d1[MAX_N][MAX_N][MAX_N][MAX_N]; int d2[MAX_N][MAX_N][MAX_N][MAX_N]; int d3[MAX_N][MAX_N][MAX_N][MAX_N]; int d4[MAX_N][MAX_N][MAX_N][MAX_N]; int main() { //ifstream cin("fis.in"); int N, M, K, L; int a, b, c, d; 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 x = 1; x <= K; x++) { for(int y = 1; y <= L; y++) { cin >> A[i][j][x][y]; } } } } for(int i = 1; i <= N; i++) { for(int j = 1; j <= M; j++) { for(int k = 1; k <= K; k++) { deque Q; for(int l = 1; l < d; l++) { while(!Q.empty() && A[i][j][k][l] > A[i][j][k][Q.back()]) { Q.pop_back(); } Q.push_back(l); } for(int l = d; l <= L; l++) { if(!Q.empty() && Q.front() <= l - d) { Q.pop_front(); } while(!Q.empty() && A[i][j][k][l] > A[i][j][k][Q.back()]) { Q.pop_back(); } Q.push_back(l); d1[i][j][k][l] = A[i][j][k][Q.front()]; } } } } for(int i = 1; i <= N; i++) { for(int j = 1; j <= M; j++) { for(int l = d; l <= L; l++) { deque Q; for(int k = 1; k < c; k++) { while(!Q.empty() && d1[i][j][k][l] > d1[i][j][Q.back()][l]) { Q.pop_back(); } Q.push_back(k); } for(int k = c; k <= K; k++) { if(!Q.empty() && Q.front() <= k - c) { Q.pop_front(); } while(!Q.empty() && d1[i][j][k][l] > d1[i][j][Q.back()][l]) { Q.pop_back(); } Q.push_back(k); d2[i][j][k][l] = d1[i][j][Q.front()][l]; } } } } for(int i = 1; i <= N; i++) { for(int k = c; k <= K; k++) { for(int l = d; l <= L; l++) { deque Q; for(int j = 1; j < b; j++) { while(!Q.empty() && d2[i][j][k][l] > d2[i][Q.back()][k][l]) { Q.pop_back(); } Q.push_back(j); } for(int j = b; j <= M; j++) { if(!Q.empty() && Q.front() <= j - b) { Q.pop_front(); } while(!Q.empty() && d2[i][j][k][l] > d2[i][Q.back()][k][l]) { Q.pop_back(); } Q.push_back(j); d3[i][j][k][l] = d2[i][Q.front()][k][l]; } } } } int ans = 1e9 + 1; for(int j = b; j <= M; j++) { for(int k = c; k <= K; k++) { for(int l = d; l <= L; l++) { deque Q; for(int i = 1; i < a; i++) { while(!Q.empty() && d3[i][j][k][l] > d3[Q.back()][j][k][l]) { Q.pop_back(); } Q.push_back(i); } for(int i = a; i <= N; i++) { if(!Q.empty() && Q.front() <= i - a) { Q.pop_front(); } while(!Q.empty() && d3[i][j][k][l] > d3[Q.back()][j][k][l]) { Q.pop_back(); } Q.push_back(i); d4[i][j][k][l] = d3[Q.front()][j][k][l]; ans = min(ans, d4[i][j][k][l]); } } } } cout << ans; return 0; }