#include #include #include using namespace std; ifstream fin("a.in"); #define MAX 37 deque Q; int v[2][MAX][MAX][MAX][MAX]; int main() { int N, M, K, L, a, b, c, d, i, j, k, l; 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 >> v[0][i][j][k][l]; for(i = 1 ; i <= N ; i++) { for(j = 1 ; j <= M ; j++) { for(k = 1 ; k <= K ; k++) { Q.clear(); for(l = 1 ; l <= L ; l++) { while(Q.size() && v[0][i][j][k][Q.front()] <= v[0][i][j][k][l]) Q.pop_front(); Q.push_front(l); if(Q.back() <= l - d) Q.pop_back(); if(l >= d) { v[1][i][j][k][l] = v[0][i][j][k][Q.back()]; } } } for(l = d ; l <= L ; l++) { Q.clear(); for(k = 1 ; k <= K ; k++) { while(Q.size() && v[1][i][j][Q.front()][l] <= v[1][i][j][k][l]) Q.pop_front(); Q.push_front(k); if(Q.back() <= k - c) Q.pop_back(); if(k >= c) { v[0][i][j][k][l] = v[1][i][j][Q.back()][l]; } } } } for(k = c ; k <= K ; k++) { for(l = d ; l <= L ; l++) { Q.clear(); for(j = 1 ; j <= M ; j++) { while(Q.size() && v[0][i][Q.front()][k][l] <= v[0][i][j][k][l]) Q.pop_front(); Q.push_front(j); if(Q.back() <= j - b) Q.pop_back(); if(j >= b) v[1][i][j][k][l] = v[0][i][Q.back()][k][l]; } } } } int best = 1000000000; for(j = b ; j <= M ; j++) { for(k = c ; k <= K ; k++) { for(l = d ; l <= L ; l++) { Q.clear(); for(i = 1 ; i <= N ; i++) { while(Q.size() && v[1][Q.front()][j][k][l] <= v[1][i][j][k][l]) Q.pop_front(); Q.push_front(i); if(Q.back() <= i - a) Q.pop_back(); if(i >= a) { best = min(best, v[1][Q.back()][j][k][l]); } } } } } cout << best << "\n"; }