#include #include #include using namespace std; const int N = 2000010; typedef long long LL; int A, B, C, m; LL s[N], b[N], bp[N]; int op[N / 2][7]; const int d[8][4] = { {0, 0, 0, 1}, {0, 0, 1, -1}, {0, 1, 0, -1}, {0, 1, 1, 1}, {1, 0, 0, -1}, {1, 0, 1, 1}, {1, 1, 0, 1}, {1, 1, 1, -1}}; int get(int i, int j, int k) { return (i * B + j) * C + k; } bool check(int mid) { memcpy(b, bp, sizeof bp); for (int i = 1; i <= mid; i++) { int x1 = op[i][0], x2 = op[i][1], y1 = op[i][2], y2 = op[i][3], z1 = op[i][4], z2 = op[i][5], h = op[i][6]; b[get(x1, y1, z1)] -= h; b[get(x1, y1, z2 + 1)] += h; b[get(x1, y2 + 1, z1)] += h; b[get(x1, y2 + 1, z2 + 1)] -= h; b[get(x2 + 1, y1, z1)] += h; b[get(x2 + 1, y1, z2 + 1)] -= h; b[get(x2 + 1, y2 + 1, z1)] -= h; b[get(x2 + 1, y2 + 1, z2 + 1)] += h; } memset(s, 0, sizeof s); for (int i = 1; i <= A; i++) for (int j = 1; j <= B; j++) for (int k = 1; k <= C; k++) { s[get(i, j, k)] = b[get(i, j, k)]; for (int u = 1; u < 8; u++) { int x = i - d[u][0], y = j - d[u][1], z = k - d[u][2], t = d[u][3]; s[get(i, j, k)] -= s[get(x, y, z)] * t; } if (s[get(i, j, k)] < 0) return true; } return false; } int main() { scanf("%d%d%d%d", &A, &B, &C, &m); for (int i = 1; i <= A; i++) for (int j = 1; j <= B; j++) for (int k = 1; k <= C; k++) scanf("%lld", &s[get(i, j, k)]); for (int i = 1; i <= A; i++) for (int j = 1; j <= B; j++) for (int k = 1; k <= C; k++) for (int u = 0; u < 8; u++) { int x = i - d[u][0], y = j - d[u][1], z = k - d[u][2], t = d[u][3]; bp[get(i, j, k)] += s[get(x, y, z)] * t; } for (int i = 1; i <= m; i++) for (int j = 0; j < 7; j++) scanf("%d", &op[i][j]); int l = 1, r = m; while (l < r) { int mid = l + r >> 1; if (check(mid)) r = mid; else l = mid + 1; } printf("%d\n", r); return 0; }