#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
const int N = 17;
const int M = 1e4 + 7;
const int inf = 1e15;
int dx[5] = {-1, 0, 1, 0};
int dy[5] = {0, 1, 0, -1};
int n, m, k, q;
char a[N][M];
int dp[N][M];
struct Data{
vector <int> a, b, w;
} e[N][M];
bool check(int x, int y){
return (x >= 1 && y >= 1 && x <= n && y <= m && a[x][y] != '#');
}
void bfs(int u, int v){
priority_queue <pair<int,pii>, vector <pair<int,pii>>, greater <pair<int,pii>>> q;
q.push({0, {u, v}});
for (int i = 1; i <= n; i ++){
for (int j = 1; j <= m; j ++){
dp[i][j] = inf;
}
}
dp[u][v] = 0;
while (!q.empty()){
u = q.top().se.fi;
v = q.top().se.se;
int w = q.top().fi;
q.pop();
if (w > dp[u][v]) continue;
for (int i = 0; i < 4; i ++){
int x = u + dx[i];
int y = v + dy[i];
if (dp[x][y] > dp[u][v] + 1 && check(x, y)){
dp[x][y] = dp[u][v] + 1;
q.push({dp[x][y], {x, y}});
}
}
for (int i = 0; i < e[u][v].a.size(); i ++){
int x = e[u][v].a[i];
int y = e[u][v].b[i];
int w = e[u][v].w[i];
if (dp[x][y] > dp[u][v] + w){
dp[x][y] = dp[u][v] + w;
q.push({dp[x][y], {x, y}});
}
}
}
}
void sub1(){
while (q --){
int u, v, x, y;
cin >> u >> v >> x >> y;
bfs(u, v);
cout << (dp[x][y] == inf ? - 1 : dp[x][y]) << '\n';
}
return;
}
void sub2(){
int dp[M];
for (int i = 0; i <= m; i ++) dp[i] = 0;
for (int i = 1; i <= m; i ++) dp[i] = dp[i - 1] + (a[1][i] == '#');
while (q --){
int u, v, x, y;
cin >> u >> v >> x >> y;
if (v <= y && dp[y] - dp[v - 1] == 0) cout << y - v << '\n';
else if (v > y && dp[v] - dp[y - 1] == 0) cout << v - y << '\n';
else cout << - 1 << '\n';
}
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
freopen("maze.inp", "r", stdin);
freopen("maze.out", "w", stdout);
cin >> n >> m >> k >> q;
for (int i = 1; i <= n; i ++){
for (int j = 1; j <= m; j ++){
cin >> a[i][j];
}
}
for (int i = 1; i <= k; i ++){
int x, y, u, v, w;
cin >> x >> y >> u >> v >> w;
e[x][y].a.push_back(u);
e[x][y].b.push_back(v);
e[x][y].w.push_back(w);
e[u][v].a.push_back(x);
e[u][v].b.push_back(y);
e[u][v].w.push_back(w);
}
if (m <= 100 && q <= 100){
sub1();
}
if (k == 0 && n == 1){
sub2();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZyAKI2RlZmluZSBwaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIGZpIGZpcnN0IAojZGVmaW5lIHNlIHNlY29uZCAKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDE3Owpjb25zdCBpbnQgTSA9IDFlNCArIDc7CmNvbnN0IGludCBpbmYgPSAxZTE1OwoKaW50IGR4WzVdID0gey0xLCAwLCAxLCAwfTsKaW50IGR5WzVdID0gezAsIDEsIDAsIC0xfTsKaW50IG4sIG0sIGssIHE7CmNoYXIgYVtOXVtNXTsKaW50IGRwW05dW01dOwpzdHJ1Y3QgRGF0YXsKICAgIHZlY3RvciA8aW50PiBhLCBiLCB3Owp9IGVbTl1bTV07Cgpib29sIGNoZWNrKGludCB4LCBpbnQgeSl7CiAgICByZXR1cm4gKHggPj0gMSAmJiB5ID49IDEgJiYgeCA8PSBuICYmIHkgPD0gbSAmJiBhW3hdW3ldICE9ICcjJyk7Cn0KCnZvaWQgYmZzKGludCB1LCBpbnQgdil7CiAgICBwcmlvcml0eV9xdWV1ZSA8cGFpcjxpbnQscGlpPiwgdmVjdG9yIDxwYWlyPGludCxwaWk+PiwgZ3JlYXRlciA8cGFpcjxpbnQscGlpPj4+IHE7CiAgICBxLnB1c2goezAsIHt1LCB2fX0pOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSArKyl7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbTsgaiArKyl7CiAgICAgICAgICAgIGRwW2ldW2pdID0gaW5mOwogICAgICAgIH0KICAgIH0KICAgIGRwW3VdW3ZdID0gMDsKICAgIHdoaWxlICghcS5lbXB0eSgpKXsKICAgICAgICB1ID0gcS50b3AoKS5zZS5maTsKICAgICAgICB2ID0gcS50b3AoKS5zZS5zZTsKICAgICAgICBpbnQgdyA9IHEudG9wKCkuZmk7CiAgICAgICAgcS5wb3AoKTsKICAgICAgICBpZiAodyA+IGRwW3VdW3ZdKSBjb250aW51ZTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkgKyspewogICAgICAgICAgICBpbnQgeCA9IHUgKyBkeFtpXTsKICAgICAgICAgICAgaW50IHkgPSB2ICsgZHlbaV07CiAgICAgICAgICAgIGlmIChkcFt4XVt5XSA+IGRwW3VdW3ZdICsgMSAmJiBjaGVjayh4LCB5KSl7CiAgICAgICAgICAgICAgICBkcFt4XVt5XSA9IGRwW3VdW3ZdICsgMTsKICAgICAgICAgICAgICAgIHEucHVzaCh7ZHBbeF1beV0sIHt4LCB5fX0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZVt1XVt2XS5hLnNpemUoKTsgaSArKyl7CiAgICAgICAgICAgIGludCB4ID0gZVt1XVt2XS5hW2ldOwogICAgICAgICAgICBpbnQgeSA9IGVbdV1bdl0uYltpXTsKICAgICAgICAgICAgaW50IHcgPSBlW3VdW3ZdLndbaV07CiAgICAgICAgICAgIGlmIChkcFt4XVt5XSA+IGRwW3VdW3ZdICsgdyl7CiAgICAgICAgICAgICAgICBkcFt4XVt5XSA9IGRwW3VdW3ZdICsgdzsKICAgICAgICAgICAgICAgIHEucHVzaCh7ZHBbeF1beV0sIHt4LCB5fX0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIHN1YjEoKXsKICAgIHdoaWxlIChxIC0tKXsKICAgICAgICBpbnQgdSwgdiwgeCwgeTsKICAgICAgICBjaW4gPj4gdSA+PiB2ID4+IHggPj4geTsKICAgICAgICBiZnModSwgdik7CiAgICAgICAgY291dCA8PCAoZHBbeF1beV0gPT0gaW5mID8gLSAxIDogZHBbeF1beV0pIDw8ICdcbic7CiAgICB9CiAgICByZXR1cm47Cn0KCnZvaWQgc3ViMigpewogICAgaW50IGRwW01dOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbTsgaSArKykgZHBbaV0gPSAwOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSArKykgZHBbaV0gPSBkcFtpIC0gMV0gKyAoYVsxXVtpXSA9PSAnIycpOwogICAgd2hpbGUgKHEgLS0pewogICAgICAgIGludCB1LCB2LCB4LCB5OwogICAgICAgIGNpbiA+PiB1ID4+IHYgPj4geCA+PiB5OwogICAgICAgIGlmICh2IDw9IHkgJiYgZHBbeV0gLSBkcFt2IC0gMV0gPT0gMCkgY291dCA8PCB5IC0gdiA8PCAnXG4nOwogICAgICAgIGVsc2UgaWYgKHYgPiB5ICYmIGRwW3ZdIC0gZHBbeSAtIDFdID09IDApIGNvdXQgPDwgdiAtIHkgPDwgJ1xuJzsKICAgICAgICBlbHNlIGNvdXQgPDwgLSAxIDw8ICdcbic7CiAgICB9Cn0KCnNpZ25lZCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgZnJlb3BlbigibWF6ZS5pbnAiLCAiciIsIHN0ZGluKTsKICAgIGZyZW9wZW4oIm1hemUub3V0IiwgInciLCBzdGRvdXQpOwogICAgY2luID4+IG4gPj4gbSA+PiBrID4+IHE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpICsrKXsKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBtOyBqICsrKXsKICAgICAgICAgICAgY2luID4+IGFbaV1bal07CiAgICAgICAgfQogICAgfQogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gazsgaSArKyl7CiAgICAgICAgaW50IHgsIHksIHUsIHYsIHc7CiAgICAgICAgY2luID4+IHggPj4geSA+PiB1ID4+IHYgPj4gdzsKICAgICAgICBlW3hdW3ldLmEucHVzaF9iYWNrKHUpOwogICAgICAgIGVbeF1beV0uYi5wdXNoX2JhY2sodik7CiAgICAgICAgZVt4XVt5XS53LnB1c2hfYmFjayh3KTsKICAgICAgICBlW3VdW3ZdLmEucHVzaF9iYWNrKHgpOwogICAgICAgIGVbdV1bdl0uYi5wdXNoX2JhY2soeSk7CiAgICAgICAgZVt1XVt2XS53LnB1c2hfYmFjayh3KTsKICAgIH0KICAgIGlmIChtIDw9IDEwMCAmJiBxIDw9IDEwMCl7CiAgICAgICAgc3ViMSgpOwogICAgfQogICAgaWYgKGsgPT0gMCAmJiBuID09IDEpewogICAgICAgIHN1YjIoKTsKICAgIH0KICAgIHJldHVybiAwOwp9