#include <cmath>
#include <iostream>
#include <vector>
#include <algorithm>
struct Vector3 {
int x;
int y;
int z;
bool operator !=(const Vector3& other) {
return (x != other.x) && (y != other.y) && (z != other.z);
}
};
struct Cell {
int value;
Vector3 pos;
};
using Tensor = std::vector<std::vector<std::vector<Cell>>>;
using SparseTable = std::vector<std::vector<std::vector<Tensor>>>;
using SparseTable2d = std::vector<std::vector<Tensor>>;
using Matrix = std::vector<std::vector<Cell>>;
Cell maxCell(const Cell& a, const Cell& b) {
return (a.value >= b.value) ? a : b;
}
struct QueryResult {
int value;
Vector3 pos;
};
QueryResult query_max(const SparseTable& table, Vector3 start, Vector3 size) {
int x = start.x;
int y = start.y;
int z = start.z;
int a = size.x;
int b = size.y;
int c = size.z;
int x2 = x + a - 1;
int y2 = y + b - 1;
int z2 = z + c - 1;
int logx = std::log2(a);
int logy = std::log2(b);
int logz = std::log2(c);
int x_shift = (1 << logx);
int y_shift = (1 << logy);
int z_shift = (1 << logz);
std::vector<Cell> cells = {
table[x][y][z][logx][logy][logz],
table[x2 - x_shift + 1][y][z][logx][logy][logz],
table[x][y2 - y_shift + 1][z][logx][logy][logz],
table[x][y][z2 - z_shift + 1][logx][logy][logz],
table[x2 - x_shift + 1][y2 - y_shift + 1][z][logx][logy][logz],
table[x2 - x_shift + 1][y][z2 - z_shift + 1][logx][logy][logz],
table[x][y2 - y_shift + 1][z2 - z_shift + 1][logx][logy][logz],
table[x2 - x_shift + 1][y2 - y_shift + 1][z2 - z_shift + 1][logx][logy][logz]
};
Cell best = cells[0];
for (auto& c : cells)
if (c.value > best.value)
best = c;
return {best.value, best.pos};
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n, m, k;
std::cin >> n >> m >> k;
int a, b, c;
std::cin >> a >> b >> c;
Tensor field(n, Matrix(m, std::vector<Cell>(k)));
SparseTable table(n, SparseTable2d(m, std::vector<Tensor>(k, field)));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
for (int o = 0; o < k; ++o) {
int val;
std::cin >> val;
field[i][j][o] = {val, {i, j, o}};
table[i][j][o][0][0][0] = {val, {i, j, o}};
}
}
}
int log_n = std::log2(n);
int log_m = std::log2(m);
int log_k = std::log2(k);
for (int px = 1; px <= log_n; ++px)
for (int i = 0; i + (1 << px) - 1 < n; ++i)
for (int j = 0; j < m; ++j)
for (int o = 0; o < k; ++o)
table[i][j][o][px][0][0] =
maxCell(table[i][j][o][px - 1][0][0],
table[i + (1 << (px - 1))][j][o][px - 1][0][0]);
for (int py = 1; py <= log_m; ++py)
for (int i = 0; i < n; ++i)
for (int j = 0; j + (1 << py) - 1 < m; ++j)
for (int o = 0; o < k; ++o)
table[i][j][o][0][py][0] =
maxCell(table[i][j][o][0][py - 1][0],
table[i][j + (1 << (py - 1))][o][0][py - 1][0]);
for (int pz = 1; pz <= log_k; ++pz)
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
for (int o = 0; o + (1 << pz) - 1 < k; ++o)
table[i][j][o][0][0][pz] =
maxCell(table[i][j][o][0][0][pz - 1],
table[i][j][o + (1 << (pz - 1))][0][0][pz - 1]);
for (int px = 1; px <= log_n; ++px)
for (int py = 1; py <= log_m; ++py)
for (int i = 0; i + (1 << px) - 1 < n; ++i)
for (int j = 0; j + (1 << py) - 1 < m; ++j)
for (int o = 0; o < k; ++o) {
Cell v1 = table[i][j][o][px - 1][py - 1][0];
Cell v2 = table[i + (1 << (px - 1))][j][o][px - 1][py - 1][0];
Cell v3 = table[i][j + (1 << (py - 1))][o][px - 1][py - 1][0];
Cell v4 = table[i + (1 << (px - 1))][j + (1 << (py - 1))][o][px - 1][py - 1][0];
table[i][j][o][px][py][0] = maxCell(maxCell(v1, v2), maxCell(v3, v4));
}
for (int px = 1; px <= log_n; ++px)
for (int pz = 1; pz <= log_k; ++pz)
for (int i = 0; i + (1 << px) - 1 < n; ++i)
for (int j = 0; j < m; ++j)
for (int o = 0; o + (1 << pz) - 1 < k; ++o) {
Cell v1 = table[i][j][o][px - 1][0][pz - 1];
Cell v2 = table[i + (1 << (px - 1))][j][o][px - 1][0][pz - 1];
Cell v3 = table[i][j][o + (1 << (pz - 1))][px - 1][0][pz - 1];
Cell v4 = table[i + (1 << (px - 1))][j][o + (1 << (pz - 1))][px - 1][0][pz - 1];
table[i][j][o][px][0][pz] = maxCell(maxCell(v1, v2), maxCell(v3, v4));
}
for (int py = 1; py <= log_m; ++py)
for (int pz = 1; pz <= log_k; ++pz)
for (int i = 0; i < n; ++i)
for (int j = 0; j + (1 << py) - 1 < m; ++j)
for (int o = 0; o + (1 << pz) - 1 < k; ++o) {
Cell v1 = table[i][j][o][0][py - 1][pz - 1];
Cell v2 = table[i][j + (1 << (py - 1))][o][0][py - 1][pz - 1];
Cell v3 = table[i][j][o + (1 << (pz - 1))][0][py - 1][pz - 1];
Cell v4 = table[i][j + (1 << (py - 1))][o + (1 << (pz - 1))][0][py - 1][pz - 1];
table[i][j][o][0][py][pz] = maxCell(maxCell(v1, v2), maxCell(v3, v4));
}
for (int px = 1; px <= log_n; ++px)
for (int py = 1; py <= log_m; ++py)
for (int pz = 1; pz <= log_k; ++pz)
for (int i = 0; i + (1 << px) - 1 < n; ++i)
for (int j = 0; j + (1 << py) - 1 < m; ++j)
for (int o = 0; o + (1 << pz) - 1 < k; ++o) {
int x1 = i, y1 = j, z1 = o;
int x2 = i + (1 << (px - 1));
int y2 = j + (1 << (py - 1));
int z2 = o + (1 << (pz - 1));
Cell v1 = table[x1][y1][z1][px - 1][py - 1][pz - 1];
Cell v2 = table[x2][y1][z1][px - 1][py - 1][pz - 1];
Cell v3 = table[x1][y2][z1][px - 1][py - 1][pz - 1];
Cell v4 = table[x2][y2][z1][px - 1][py - 1][pz - 1];
Cell v5 = table[x1][y1][z2][px - 1][py - 1][pz - 1];
Cell v6 = table[x2][y1][z2][px - 1][py - 1][pz - 1];
Cell v7 = table[x1][y2][z2][px - 1][py - 1][pz - 1];
Cell v8 = table[x2][y2][z2][px - 1][py - 1][pz - 1];
table[i][j][o][px][py][pz] =
maxCell(maxCell(maxCell(v1, v2), maxCell(v3, v4)),
maxCell(maxCell(v5, v6), maxCell(v7, v8)));
}
int q;
std::cin >> q;
Vector3 size = {a, b, c};
while (q-- > 0) {
int x;
int y;
int z;
std::cin >> x >> y >> z;
Vector3 start = {x, y, z};
QueryResult res = query_max(table, start, size);
while (res.pos != start) {
start = res.pos;
res = query_max(table, start, size);
}
std::cout << res.pos.x << " " << res.pos.y << " " << res.pos.z << "\n";
}
}
/*
39 94 94 63
27 79 10 69
28 86 61 79
97 78 64 23
94 94 94
86 86 79
97 86 79
*/