#include <bits/stdc++.h>
using namespace std;
#define FOR(i, a, b) for(int i = a; i <= (int)b; i++)
#define FORD(i, a, b) for(int i = a; i >= (int)b; i--)
#define fi first
#define se second
#define pb push_back
#define ALL(A) A.begin(), A.end()
#define SZ(A) (int)(A).size()
const int N = (int) 1e5 + 5;
const int dx[] = {0, 0, - 1, 1};
const int dy[] = {1, - 1, 0, 0};
int n, m, k, q;
char a[15][10005];
struct Portals {
int x, y, u, v, w;
void input() {
cin >> x >> y >> u >> v >> w;
}
} port[15];
long long ans[100005];
vector <array <int, 3>> g[15][10005];
long long dist[15][15][10005];
void dijkstra(int id) {
FOR(i, 1, n) FOR(j, 1, m) {
dist[id][i][j] = 1e18;
}
#define bg array <long long, 4>
priority_queue <bg, vector <bg>, greater <bg>> pq;
dist[id][port[id].x][port[id].y] = 0;
pq.push({0, id, port[id].x, port[id].y});
while (!pq.empty()) {
auto [cost, id, u, v] = pq.top();
pq.pop();
if (cost > dist[id][u][v]) continue;
FOR(s, 0, 3) {
int x = u + dx[s], y = v + dy[s];
if (x < 1 || x > n || y < 1 || y > m || a[x][y] == '#') continue;
if (dist[id][x][y] > cost + 1) {
dist[id][x][y] = cost + 1;
pq.push({cost + 1, id, x, y});
}
}
for (auto it : g[u][v]) {
int x = it[0], y = it[1], w = it[2];
if (dist[id][x][y] > cost + w) {
dist[id][x][y] = cost + w;
pq.push({cost + w, id, x, y});
}
}
}
}
void bfs(int id, int l, int r, int xx, int yy) {
FOR(i, 1, n) FOR(j, l, r) {
dist[id][i][j] = 1e18;
}
queue <pair <int, int>> q;
dist[id][xx][yy] = 0;
q.push({xx, yy});
while (!q.empty()) {
auto [u, v] = q.front(); q.pop();
FOR(s, 0, 3) {
int x = u + dx[s], y = v + dy[s];
if (x < 1 || x > n || y < l || y > r || a[x][y] == '#') continue;
if (dist[id][x][y] > dist[id][u][v] + 1) {
dist[id][x][y] = dist[id][u][v] + 1;
q.push({x, y});
}
}
}
}
void DAC(int L, int R, vector <array <int, 5>> &cur) {
if (L > R) return;
if (cur.empty()) return;
int mid = L + R >> 1;
if (L == R) {
FOR(i, 1, n) if (a[i][L] != '#') {
bfs(i, L, R, i, R);
}
for (auto x : cur) {
/// cout << dist[L][x[0]][x[1]] << " " << dist[L][x[2]][x[3]] << '\n';
FOR(i, 1, n) if (a[i][mid] == '.') {
ans[x[4]] = min(ans[x[4]], dist[i][x[0]][x[1]] + dist[i][x[2]][x[3]]);
}
}
return;
}
vector <array <int, 5>> le, ri, mi;
for (auto x : cur) {
/// x y u v i d
if (x[3] <= mid) le.push_back(x);
else if (x[1] >= mid + 1) ri.push_back(x);
else mi.push_back(x);
}
FOR(i, 1, n) if (a[i][mid] == '.') {
bfs(i, L, R, i, mid);
}
for (auto x : mi) {
FOR(i, 1, n) if (a[i][mid] == '.') {
ans[x[4]] = min(ans[x[4]], dist[i][x[0]][x[1]] + dist[i][x[2]][x[3]]);
}
}
for (auto x : le) {
FOR(i, 1, n) if (a[i][mid] == '.') {
FOR(j, 1, n) if (a[j][mid] == '.') {
ans[x[4]] = min(ans[x[4]], dist[i][x[0]][x[1]] + dist[i][j][mid] + dist[j][x[2]][x[3]]);
}
}
}
for (auto x : ri) {
FOR(i, 1, n) if (a[i][mid] == '.') {
FOR(j, 1, n) if (a[j][mid] == '.') {
ans[x[4]] = min(ans[x[4]], dist[i][x[0]][x[1]] + dist[i][j][mid] + dist[j][x[2]][x[3]]);
}
}
}
DAC(L, mid, le);
DAC(mid + 1, R, ri);
}
signed main () {
ios_base :: sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#define ko "maze"
if (fopen(ko".inp", "r")) {
freopen(ko".inp", "r", stdin);
freopen(ko".out", "w", stdout);
}
cin >> n >> m >> k >> q;
FOR(i, 1, n) FOR(j, 1, m) cin >> a[i][j];
FOR(i, 1, k) port[i].input();
FOR(i, 1, q) ans[i] = 1e18;
FOR(i, 1, k) {
auto [x, y, u, v, w] = port[i];
g[x][y].push_back({u, v, w});
g[u][v].push_back({x, y, w});
}
FOR(i, 1, k) dijkstra(i);
vector <array <int, 5>> query;
FOR(i, 1, q) {
int x, y, u, v; cin >> x >> y >> u >> v;
if (a[x][y] == '#') continue;
if (a[u][v] == '#') continue;
FOR(id, 1, k) {
ans[i] = min(ans[i], dist[id][x][y] + dist[id][u][v]);
}
if (y > v) {
swap(x, u);
swap(y, v);
}
query.push_back({x, y, u, v, i});
}
DAC(1, m, query);
FOR(i, 1, q) {
if (ans[i] >= 1e18) cout << - 1 << '\n';
else cout << ans[i] << '\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgRk9SKGksIGEsIGIpIGZvcihpbnQgaSA9IGE7IGkgPD0gKGludCliOyBpKyspCiNkZWZpbmUgRk9SRChpLCBhLCBiKSBmb3IoaW50IGkgPSBhOyBpID49IChpbnQpYjsgaS0tKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgQUxMKEEpIEEuYmVnaW4oKSwgQS5lbmQoKQojZGVmaW5lIFNaKEEpIChpbnQpKEEpLnNpemUoKQpjb25zdCBpbnQgTiA9IChpbnQpIDFlNSArIDU7CmNvbnN0IGludCBkeFtdID0gezAsIDAsIC0gMSwgMX07CmNvbnN0IGludCBkeVtdID0gezEsIC0gMSwgMCwgMH07CgppbnQgbiwgbSwgaywgcTsKY2hhciBhWzE1XVsxMDAwNV07CgpzdHJ1Y3QgUG9ydGFscyB7CiAgICBpbnQgeCwgeSwgdSwgdiwgdzsKICAgIHZvaWQgaW5wdXQoKSB7CiAgICAgICAgY2luID4+IHggPj4geSA+PiB1ID4+IHYgPj4gdzsKICAgIH0KfSBwb3J0WzE1XTsKbG9uZyBsb25nIGFuc1sxMDAwMDVdOwp2ZWN0b3IgPGFycmF5IDxpbnQsIDM+PiBnWzE1XVsxMDAwNV07CmxvbmcgbG9uZyBkaXN0WzE1XVsxNV1bMTAwMDVdOwoKdm9pZCBkaWprc3RyYShpbnQgaWQpIHsKICAgIEZPUihpLCAxLCBuKSBGT1IoaiwgMSwgbSkgewogICAgICAgIGRpc3RbaWRdW2ldW2pdID0gMWUxODsKICAgIH0KICAgICNkZWZpbmUgYmcgYXJyYXkgPGxvbmcgbG9uZywgND4KICAgIHByaW9yaXR5X3F1ZXVlIDxiZywgdmVjdG9yIDxiZz4sIGdyZWF0ZXIgPGJnPj4gcHE7CgogICAgZGlzdFtpZF1bcG9ydFtpZF0ueF1bcG9ydFtpZF0ueV0gPSAwOwogICAgcHEucHVzaCh7MCwgaWQsIHBvcnRbaWRdLngsIHBvcnRbaWRdLnl9KTsKCiAgICB3aGlsZSAoIXBxLmVtcHR5KCkpIHsKICAgICAgICBhdXRvIFtjb3N0LCBpZCwgdSwgdl0gPSBwcS50b3AoKTsKICAgICAgICBwcS5wb3AoKTsKICAgICAgICBpZiAoY29zdCA+IGRpc3RbaWRdW3VdW3ZdKSBjb250aW51ZTsKICAgICAgICBGT1IocywgMCwgMykgewogICAgICAgICAgICBpbnQgeCA9IHUgKyBkeFtzXSwgeSA9IHYgKyBkeVtzXTsKICAgICAgICAgICAgaWYgKHggPCAxIHx8IHggPiBuIHx8IHkgPCAxIHx8IHkgPiBtIHx8IGFbeF1beV0gPT0gJyMnKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGRpc3RbaWRdW3hdW3ldID4gY29zdCArIDEpIHsKICAgICAgICAgICAgICAgIGRpc3RbaWRdW3hdW3ldID0gY29zdCArIDE7CiAgICAgICAgICAgICAgICBwcS5wdXNoKHtjb3N0ICsgMSwgaWQsIHgsIHl9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGF1dG8gaXQgOiBnW3VdW3ZdKSB7CiAgICAgICAgICAgIGludCB4ID0gaXRbMF0sIHkgPSBpdFsxXSwgdyA9IGl0WzJdOwogICAgICAgICAgICBpZiAoZGlzdFtpZF1beF1beV0gPiBjb3N0ICsgdykgewogICAgICAgICAgICAgICAgZGlzdFtpZF1beF1beV0gPSBjb3N0ICsgdzsKICAgICAgICAgICAgICAgIHBxLnB1c2goe2Nvc3QgKyB3LCBpZCwgeCwgeX0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIGJmcyhpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHh4LCBpbnQgeXkpIHsKICAgIEZPUihpLCAxLCBuKSBGT1IoaiwgbCwgcikgewogICAgICAgIGRpc3RbaWRdW2ldW2pdID0gMWUxODsKICAgIH0KCiAgICBxdWV1ZSA8cGFpciA8aW50LCBpbnQ+PiBxOwogICAgZGlzdFtpZF1beHhdW3l5XSA9IDA7CiAgICBxLnB1c2goe3h4LCB5eX0pOwoKICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgYXV0byBbdSwgdl0gPSBxLmZyb250KCk7IHEucG9wKCk7CgogICAgICAgIEZPUihzLCAwLCAzKSB7CiAgICAgICAgICAgIGludCB4ID0gdSArIGR4W3NdLCB5ID0gdiArIGR5W3NdOwogICAgICAgICAgICBpZiAoeCA8IDEgfHwgeCA+IG4gfHwgeSA8IGwgfHwgeSA+IHIgfHwgYVt4XVt5XSA9PSAnIycpIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoZGlzdFtpZF1beF1beV0gPiBkaXN0W2lkXVt1XVt2XSArIDEpIHsKICAgICAgICAgICAgICAgIGRpc3RbaWRdW3hdW3ldID0gZGlzdFtpZF1bdV1bdl0gKyAxOwogICAgICAgICAgICAgICAgcS5wdXNoKHt4LCB5fSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnZvaWQgREFDKGludCBMLCBpbnQgUiwgdmVjdG9yIDxhcnJheSA8aW50LCA1Pj4gJmN1cikgewogICAgaWYgKEwgPiBSKSByZXR1cm47CiAgICBpZiAoY3VyLmVtcHR5KCkpIHJldHVybjsKCiAgICBpbnQgbWlkID0gTCArIFIgPj4gMTsKICAgIGlmIChMID09IFIpIHsKICAgICAgICBGT1IoaSwgMSwgbikgaWYgKGFbaV1bTF0gIT0gJyMnKSB7CiAgICAgICAgICAgIGJmcyhpLCBMLCBSLCBpLCBSKTsKICAgICAgICB9CiAgICAgICAgZm9yIChhdXRvIHggOiBjdXIpIHsKICAgICAgICAgICAgLy8vIGNvdXQgPDwgZGlzdFtMXVt4WzBdXVt4WzFdXSA8PCAiICIgPDwgZGlzdFtMXVt4WzJdXVt4WzNdXSA8PCAnXG4nOwogICAgICAgICAgICBGT1IoaSwgMSwgbikgaWYgKGFbaV1bbWlkXSA9PSAnLicpIHsKICAgICAgICAgICAgICAgIGFuc1t4WzRdXSA9IG1pbihhbnNbeFs0XV0sIGRpc3RbaV1beFswXV1beFsxXV0gKyBkaXN0W2ldW3hbMl1dW3hbM11dKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CgogICAgdmVjdG9yIDxhcnJheSA8aW50LCA1Pj4gbGUsIHJpLCBtaTsKCiAgICBmb3IgKGF1dG8geCA6IGN1cikgewogICAgICAgIC8vLyB4IHkgdSB2IGkgZAogICAgICAgIGlmICh4WzNdIDw9IG1pZCkgbGUucHVzaF9iYWNrKHgpOwogICAgICAgIGVsc2UgaWYgKHhbMV0gPj0gbWlkICsgMSkgcmkucHVzaF9iYWNrKHgpOwogICAgICAgIGVsc2UgbWkucHVzaF9iYWNrKHgpOwogICAgfQoKICAgIEZPUihpLCAxLCBuKSBpZiAoYVtpXVttaWRdID09ICcuJykgewogICAgICAgIGJmcyhpLCBMLCBSLCBpLCBtaWQpOwogICAgfQoKICAgIGZvciAoYXV0byB4IDogbWkpIHsKICAgICAgICBGT1IoaSwgMSwgbikgaWYgKGFbaV1bbWlkXSA9PSAnLicpIHsKICAgICAgICAgICAgYW5zW3hbNF1dID0gbWluKGFuc1t4WzRdXSwgZGlzdFtpXVt4WzBdXVt4WzFdXSArIGRpc3RbaV1beFsyXV1beFszXV0pOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKGF1dG8geCA6IGxlKSB7CiAgICAgICAgRk9SKGksIDEsIG4pIGlmIChhW2ldW21pZF0gPT0gJy4nKSB7CiAgICAgICAgICAgIEZPUihqLCAxLCBuKSBpZiAoYVtqXVttaWRdID09ICcuJykgewogICAgICAgICAgICAgICAgYW5zW3hbNF1dID0gbWluKGFuc1t4WzRdXSwgZGlzdFtpXVt4WzBdXVt4WzFdXSArIGRpc3RbaV1bal1bbWlkXSArIGRpc3Rbal1beFsyXV1beFszXV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZvciAoYXV0byB4IDogcmkpIHsKICAgICAgICBGT1IoaSwgMSwgbikgaWYgKGFbaV1bbWlkXSA9PSAnLicpIHsKICAgICAgICAgICAgRk9SKGosIDEsIG4pIGlmIChhW2pdW21pZF0gPT0gJy4nKSB7CiAgICAgICAgICAgICAgICBhbnNbeFs0XV0gPSBtaW4oYW5zW3hbNF1dLCBkaXN0W2ldW3hbMF1dW3hbMV1dICsgZGlzdFtpXVtqXVttaWRdICsgZGlzdFtqXVt4WzJdXVt4WzNdXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgREFDKEwsIG1pZCwgbGUpOwogICAgREFDKG1pZCArIDEsIFIsIHJpKTsKfQoKc2lnbmVkIG1haW4gKCkgewogICAgaW9zX2Jhc2UgOjogc3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShudWxscHRyKTsgY291dC50aWUobnVsbHB0cik7CiAgICAjZGVmaW5lIGtvICJtYXplIgogICAgaWYgKGZvcGVuKGtvIi5pbnAiLCAiciIpKSB7CiAgICAgICAgZnJlb3BlbihrbyIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihrbyIub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQogICAgY2luID4+IG4gPj4gbSA+PiBrID4+IHE7CiAgICBGT1IoaSwgMSwgbikgRk9SKGosIDEsIG0pIGNpbiA+PiBhW2ldW2pdOwogICAgRk9SKGksIDEsIGspIHBvcnRbaV0uaW5wdXQoKTsKICAgIEZPUihpLCAxLCBxKSBhbnNbaV0gPSAxZTE4OwogICAgRk9SKGksIDEsIGspIHsKICAgICAgICBhdXRvIFt4LCB5LCB1LCB2LCB3XSA9IHBvcnRbaV07CiAgICAgICAgZ1t4XVt5XS5wdXNoX2JhY2soe3UsIHYsIHd9KTsKICAgICAgICBnW3VdW3ZdLnB1c2hfYmFjayh7eCwgeSwgd30pOwogICAgfQogICAgRk9SKGksIDEsIGspIGRpamtzdHJhKGkpOwoKICAgIHZlY3RvciA8YXJyYXkgPGludCwgNT4+IHF1ZXJ5OwogICAgRk9SKGksIDEsIHEpIHsKICAgICAgICBpbnQgeCwgeSwgdSwgdjsgY2luID4+IHggPj4geSA+PiB1ID4+IHY7CiAgICAgICAgaWYgKGFbeF1beV0gPT0gJyMnKSBjb250aW51ZTsKICAgICAgICBpZiAoYVt1XVt2XSA9PSAnIycpIGNvbnRpbnVlOwogICAgICAgIEZPUihpZCwgMSwgaykgewogICAgICAgICAgICBhbnNbaV0gPSBtaW4oYW5zW2ldLCBkaXN0W2lkXVt4XVt5XSArIGRpc3RbaWRdW3VdW3ZdKTsKICAgICAgICB9CiAgICAgICAgaWYgKHkgPiB2KSB7CiAgICAgICAgICAgIHN3YXAoeCwgdSk7CiAgICAgICAgICAgIHN3YXAoeSwgdik7CiAgICAgICAgfQogICAgICAgIHF1ZXJ5LnB1c2hfYmFjayh7eCwgeSwgdSwgdiwgaX0pOwogICAgfQoKICAgIERBQygxLCBtLCBxdWVyeSk7CgogICAgRk9SKGksIDEsIHEpIHsKICAgICAgICBpZiAoYW5zW2ldID49IDFlMTgpIGNvdXQgPDwgLSAxIDw8ICdcbic7CiAgICAgICAgZWxzZSBjb3V0IDw8IGFuc1tpXSA8PCAnXG4nOwogICAgfQoKICAgIHJldHVybiAwOwp9Cgo=