#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, m, q; 
pair<int, int> a[2005];
vector<int> g[2005];
int par[2005];
vector<int> z[2005][2005];
void dfs(int v, int p) {
	par[v] = p;
	for (const int u : g[v]) {
		if (u != p) dfs(u, v);
	}
}
int32_t main() {
	ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	cin >> n >> m >> q;
	for (int i = 1; i < n; i++) {
		int u, v; cin >> u >> v;
		a[i] = {u, v};
		g[u].push_back(v);
		g[v].push_back(u);
	}
	for (int i = 0; i < m; i++) {
		int p, c; cin >> p >> c;
		z[a[p].first][a[p].second].push_back(c);
		z[a[p].second][a[p].first].push_back(c);
	}
	
	while (q--) {
		int s, t, x, y; cin >> s >> t >> x >> y;
		dfs(s, -1);
		vector<int> costs;
		int cur = t, prev = -1;
		while (cur != -1) {
			if (prev != -1) {
				for (const int u : z[cur][prev])
					costs.push_back(u);
			}
			prev = cur;
			cur = par[cur];
		}
		sort(costs.begin(), costs.end());
		for (const int u : costs) {
			if (y >= u) y -= u;
			else x--;
		}
		if (x < 0) cout << -1 << '\n';
		else cout << x << '\n';
	}
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |