#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 100005
#define file
int n, m, q;
vector<int> g[maxn];
struct edge {
int u, v;
} edges[maxn];
struct station {
int id, cost;
} stations[maxn];
vector<pair<int, int> > ups[maxn];
int par[20][maxn], deep[maxn];
void pre_dfs (int u, int p) {
for (int v : g[u]) {
if (v == p) continue ;
deep[v] = deep[u] + 1;
par[0][v] = u;
for (int i = 1; i < 20; i++) par[i][v] = par[i - 1][par[i - 1][v]];
pre_dfs (v, u);
}
}
int LCA (int u, int v) {
if (deep[u] < deep[v]) swap (u, v);
int dif = deep[u] - deep[v];
for (int i = 19; i >= 0; i--) if ((dif >> i) & 1) {
u = par[i][u];
}
if (u == v) return u;
for (int i = 19; i >= 0; i--) if (par[i][u] != par[i][v]) {
u = par[i][u];
v = par[i][v];
}
return par[0][u];
}
int root[maxn], id_node;
struct node {
ll val, cnt;
int le, ri;
} tr[maxn * 20];
int update (int id, int l, int r, int pos, int val) {
int ne_id = ++id_node;
tr[ne_id] = tr[id];
tr[ne_id].val += val;
tr[ne_id].cnt += 1;
if (l == r) return ne_id;
int mid = (l + r) >> 1;
if (pos <= mid) tr[ne_id].le = update (tr[id].le, l, mid, pos, val);
else tr[ne_id].ri = update (tr[id].ri, mid + 1, r, pos, val);
return ne_id;
}
int get_cnt (int u, int v, int lca, int l, int r, ll val) {
if (l == r) {
int cnt = tr[u].cnt + tr[v].cnt - 2 * tr[lca].cnt;
ll cur_val = tr[u].val + tr[v].val - 2ll * tr[lca].val;
if (cur_val <= val) return cnt;
else return 0;
}
int mid = (l + r) >> 1;
int cnt_le = tr[tr[u].le].cnt + tr[tr[v].le].cnt - 2 * tr[tr[lca].le].cnt;
ll val_le = tr[tr[u].le].val + tr[tr[v].le].val - 2ll * tr[tr[lca].le].val;
if (val_le > val) return get_cnt (tr[u].le, tr[v].le, tr[lca].le, l, mid, val);
else return get_cnt (tr[u].ri, tr[v].ri, tr[lca].ri, mid + 1, r, val - val_le) + cnt_le;
}
void dfs (int u, int p) {
root[u] = root[p];
for (auto x : ups[u]) {
root[u] = update (root[u], 1, m, x.first, x.second);
}
for (int v : g[u]) {
if (v == p) continue ;
dfs (v, u);
}
}
void read() {
cin >> n >> m >> q;
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
edges[i] = {u, v};
g[u].push_back (v);
g[v].push_back (u);
}
for (int i = 1; i <= m; i++) {
int id, cost;
cin >> id >> cost;
stations[i] = {id, cost};
}
}
void solve() {
pre_dfs (1, -1);
sort (stations + 1, stations + m + 1, [](const station& a, const station& b) {
return a.cost < b.cost;
});
for (int i = 1; i <= m; i++) {
int id_e = stations[i].id, cost = stations[i].cost;
int u = edges[id_e].u, v = edges[id_e].v;
if (par[0][u] == v) swap (u, v);
ups[v].push_back ({i, cost});
}
dfs (1, 0);
while (q--) {
ll u, v, x, y;
cin >> u >> v >> x >> y;
int lca = LCA (u, v);
int tol_cnt = tr[root[u]].cnt + tr[root[v]].cnt - 2 * tr[root[lca]].cnt;
int cur_cnt = get_cnt (root[u], root[v], root[lca], 1, m, y);
int gold_needed = tol_cnt - cur_cnt;
if (x < gold_needed) cout << "-1\n";
else cout << x - gold_needed << '\n';
}
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
if (fopen(file".INP","r")) {
freopen(file".INP","r",stdin);
freopen(file".OUT","w",stdout);
}
read();
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbWF4biAxMDAwMDUKI2RlZmluZSBmaWxlCgppbnQgbiwgbSwgcTsKdmVjdG9yPGludD4gZ1ttYXhuXTsKCnN0cnVjdCBlZGdlIHsKICAgIGludCB1LCB2Owp9IGVkZ2VzW21heG5dOwoKc3RydWN0IHN0YXRpb24gewogICAgaW50IGlkLCBjb3N0Owp9IHN0YXRpb25zW21heG5dOwoKdmVjdG9yPHBhaXI8aW50LCBpbnQ+ID4gdXBzW21heG5dOwoKaW50IHBhclsyMF1bbWF4bl0sIGRlZXBbbWF4bl07CnZvaWQgcHJlX2RmcyAoaW50IHUsIGludCBwKSB7CiAgICBmb3IgKGludCB2IDogZ1t1XSkgewogICAgICAgIGlmICh2ID09IHApIGNvbnRpbnVlIDsKICAgICAgICBkZWVwW3ZdID0gZGVlcFt1XSArIDE7CiAgICAgICAgcGFyWzBdW3ZdID0gdTsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IDIwOyBpKyspIHBhcltpXVt2XSA9IHBhcltpIC0gMV1bcGFyW2kgLSAxXVt2XV07CgogICAgICAgIHByZV9kZnMgKHYsIHUpOwogICAgfQp9CmludCBMQ0EgKGludCB1LCBpbnQgdikgewogICAgaWYgKGRlZXBbdV0gPCBkZWVwW3ZdKSBzd2FwICh1LCB2KTsKICAgIGludCBkaWYgPSBkZWVwW3VdIC0gZGVlcFt2XTsKCiAgICBmb3IgKGludCBpID0gMTk7IGkgPj0gMDsgaS0tKSBpZiAoKGRpZiA+PiBpKSAmIDEpIHsKICAgICAgICB1ID0gcGFyW2ldW3VdOwogICAgfQoKICAgIGlmICh1ID09IHYpIHJldHVybiB1OwoKICAgIGZvciAoaW50IGkgPSAxOTsgaSA+PSAwOyBpLS0pIGlmIChwYXJbaV1bdV0gIT0gcGFyW2ldW3ZdKSB7CiAgICAgICAgdSA9IHBhcltpXVt1XTsKICAgICAgICB2ID0gcGFyW2ldW3ZdOwogICAgfQoKICAgIHJldHVybiBwYXJbMF1bdV07Cn0KCmludCByb290W21heG5dLCBpZF9ub2RlOwpzdHJ1Y3Qgbm9kZSB7CiAgICBsbCB2YWwsIGNudDsKICAgIGludCBsZSwgcmk7Cn0gdHJbbWF4biAqIDIwXTsKCmludCB1cGRhdGUgKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgcG9zLCBpbnQgdmFsKSB7CiAgICBpbnQgbmVfaWQgPSArK2lkX25vZGU7CiAgICB0cltuZV9pZF0gPSB0cltpZF07CgogICAgdHJbbmVfaWRdLnZhbCArPSB2YWw7CiAgICB0cltuZV9pZF0uY250ICs9IDE7CgogICAgaWYgKGwgPT0gcikgcmV0dXJuIG5lX2lkOwoKICAgIGludCBtaWQgPSAobCArIHIpID4+IDE7CiAgICBpZiAocG9zIDw9IG1pZCkgdHJbbmVfaWRdLmxlID0gdXBkYXRlICh0cltpZF0ubGUsIGwsIG1pZCwgcG9zLCB2YWwpOwogICAgZWxzZSB0cltuZV9pZF0ucmkgPSB1cGRhdGUgKHRyW2lkXS5yaSwgbWlkICsgMSwgciwgcG9zLCB2YWwpOwoKICAgIHJldHVybiBuZV9pZDsKfQoKaW50IGdldF9jbnQgKGludCB1LCBpbnQgdiwgaW50IGxjYSwgaW50IGwsIGludCByLCBsbCB2YWwpIHsKICAgIGlmIChsID09IHIpIHsKICAgICAgICBpbnQgY250ID0gdHJbdV0uY250ICsgdHJbdl0uY250IC0gMiAqIHRyW2xjYV0uY250OwogICAgICAgIGxsIGN1cl92YWwgPSB0clt1XS52YWwgKyB0clt2XS52YWwgLSAybGwgKiB0cltsY2FdLnZhbDsKCiAgICAgICAgaWYgKGN1cl92YWwgPD0gdmFsKSByZXR1cm4gY250OwogICAgICAgIGVsc2UgcmV0dXJuIDA7CiAgICB9CgogICAgaW50IG1pZCA9IChsICsgcikgPj4gMTsKICAgIGludCBjbnRfbGUgPSB0clt0clt1XS5sZV0uY250ICsgdHJbdHJbdl0ubGVdLmNudCAtIDIgKiB0clt0cltsY2FdLmxlXS5jbnQ7CiAgICBsbCB2YWxfbGUgPSB0clt0clt1XS5sZV0udmFsICsgdHJbdHJbdl0ubGVdLnZhbCAtIDJsbCAqIHRyW3RyW2xjYV0ubGVdLnZhbDsKCiAgICBpZiAodmFsX2xlID4gdmFsKSByZXR1cm4gZ2V0X2NudCAodHJbdV0ubGUsIHRyW3ZdLmxlLCB0cltsY2FdLmxlLCBsLCBtaWQsIHZhbCk7CiAgICBlbHNlIHJldHVybiBnZXRfY250ICh0clt1XS5yaSwgdHJbdl0ucmksIHRyW2xjYV0ucmksIG1pZCArIDEsIHIsIHZhbCAtIHZhbF9sZSkgKyBjbnRfbGU7Cn0KCnZvaWQgZGZzIChpbnQgdSwgaW50IHApIHsKICAgIHJvb3RbdV0gPSByb290W3BdOwogICAgZm9yIChhdXRvIHggOiB1cHNbdV0pIHsKICAgICAgICByb290W3VdID0gdXBkYXRlIChyb290W3VdLCAxLCBtLCB4LmZpcnN0LCB4LnNlY29uZCk7CiAgICB9CgogICAgZm9yIChpbnQgdiA6IGdbdV0pIHsKICAgICAgICBpZiAodiA9PSBwKSBjb250aW51ZSA7CiAgICAgICAgZGZzICh2LCB1KTsKICAgIH0KfQoKdm9pZCByZWFkKCkgewogICAgY2luID4+IG4gPj4gbSA+PiBxOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspIHsKICAgICAgICBpbnQgdSwgdjsKICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgIGVkZ2VzW2ldID0ge3UsIHZ9OwogICAgICAgIGdbdV0ucHVzaF9iYWNrICh2KTsKICAgICAgICBnW3ZdLnB1c2hfYmFjayAodSk7CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgaW50IGlkLCBjb3N0OwogICAgICAgIGNpbiA+PiBpZCA+PiBjb3N0OwogICAgICAgIHN0YXRpb25zW2ldID0ge2lkLCBjb3N0fTsKICAgIH0KfQoKdm9pZCBzb2x2ZSgpIHsKICAgIHByZV9kZnMgKDEsIC0xKTsKCiAgICBzb3J0IChzdGF0aW9ucyArIDEsIHN0YXRpb25zICsgbSArIDEsIFtdKGNvbnN0IHN0YXRpb24mIGEsIGNvbnN0IHN0YXRpb24mIGIpIHsKICAgICAgICByZXR1cm4gYS5jb3N0IDwgYi5jb3N0OwogICAgfSk7CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgaW50IGlkX2UgPSBzdGF0aW9uc1tpXS5pZCwgY29zdCA9IHN0YXRpb25zW2ldLmNvc3Q7CgogICAgICAgIGludCB1ID0gZWRnZXNbaWRfZV0udSwgdiA9IGVkZ2VzW2lkX2VdLnY7CiAgICAgICAgaWYgKHBhclswXVt1XSA9PSB2KSBzd2FwICh1LCB2KTsKCiAgICAgICAgdXBzW3ZdLnB1c2hfYmFjayAoe2ksIGNvc3R9KTsKICAgIH0KCiAgICBkZnMgKDEsIDApOwoKICAgIHdoaWxlIChxLS0pIHsKICAgICAgICBsbCB1LCB2LCB4LCB5OwogICAgICAgIGNpbiA+PiB1ID4+IHYgPj4geCA+PiB5OwoKICAgICAgICBpbnQgbGNhID0gTENBICh1LCB2KTsKCiAgICAgICAgaW50IHRvbF9jbnQgPSB0cltyb290W3VdXS5jbnQgKyB0cltyb290W3ZdXS5jbnQgLSAyICogdHJbcm9vdFtsY2FdXS5jbnQ7CiAgICAgICAgaW50IGN1cl9jbnQgPSBnZXRfY250IChyb290W3VdLCByb290W3ZdLCByb290W2xjYV0sIDEsIG0sIHkpOwogICAgICAgIGludCBnb2xkX25lZWRlZCA9IHRvbF9jbnQgLSBjdXJfY250OwoKICAgICAgICBpZiAoeCA8IGdvbGRfbmVlZGVkKSBjb3V0IDw8ICItMVxuIjsKICAgICAgICBlbHNlIGNvdXQgPDwgeCAtIGdvbGRfbmVlZGVkIDw8ICdcbic7CiAgICB9Cn0KCnNpZ25lZCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApO2NvdXQudGllKDApOwoKICAgIGlmIChmb3BlbihmaWxlIi5JTlAiLCJyIikpIHsKICAgICAgICBmcmVvcGVuKGZpbGUiLklOUCIsInIiLHN0ZGluKTsKICAgICAgICBmcmVvcGVuKGZpbGUiLk9VVCIsInciLHN0ZG91dCk7CiAgICB9CgogICAgcmVhZCgpOwogICAgc29sdmUoKTsKCiAgICByZXR1cm4gMDsKfQo=