#include <bits/stdc++.h>
using namespace std;
#define FNAME "qtree"
const int N = 1e5 + 5;
const int LG = 20;
const int M = 9;
struct Query {
int u, v;
int k;
int lca;
};
int n, q, t, m;
vector<pair<int,int>> adj[N];
Query queries[N * 5];
int depth[N];
int up[LG][N];
int p[N];
int dp[N][M];
void Task() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(9);
if (fopen(FNAME".inp","r")) {
freopen(FNAME".inp","r",stdin);
freopen(FNAME".out","w",stdout);
}
}
void DFS_LCA(int u, int par) {
for (auto e : adj[u]) {
int v = e.first;
if (v ^ par) {
up[0][v] = u;
depth[v] = depth[u] + 1;
DFS_LCA(v, u);
}
}
}
void construct_LCA() {
for (int i = 1; i < LG; i++) {
for (int j = 1; j <= n; j++) {
up[i][j] = up[i - 1][up[i - 1][j]];
}
}
}
int LCA(int u, int v) {
if (depth[u] < depth[v]) swap(u, v);
for (int i = LG - 1; i >= 0; i--) {
if (depth[u] - (1 << i) >= depth[v]) {
u = up[i][u];
}
}
if (u == v) return u;
for (int i = LG - 1; i >= 0; i--) {
if (up[i][u] != up[i][v]) {
u = up[i][u];
v = up[i][v];
}
}
return up[0][u];
}
void DFS_calc(int u, int par) {
for (auto &e : adj[u]) {
if (e.first ^ par) {
DFS_calc(e.first, u);
e.second = p[e.first];
p[u] += p[e.first];
}
}
}
void DFS_DP(int u, int par) {
for (auto e : adj[u]) {
int v = e.first;
int w = e.second;
if (v ^ par) {
DFS_DP(v, u);
for (int x = m; x >= 1; x--) {
for (int y = 0; y < x; y++) {
dp[u][x] = max(dp[u][x], dp[v][y] + dp[u][x - y - 1] + e.second);
}
}
}
}
}
void solve() {
memset(p, 0, sizeof(p));
int l, r;
cin >> l >> r;
for (int i = l; i <= r; i++) {
p[queries[i].u] += queries[i].k;
p[queries[i].v] += queries[i].k;
p[queries[i].lca] -= queries[i].k * 2;
}
DFS_calc(1, 1);
memset(dp, 0, sizeof(dp));
DFS_DP(1, 1);
int ans = 0;
for (int i = 1; i <= n; i++) ans = max(ans, dp[i][m]);
cout << ans << '\n';
}
void Solve() {
//Your Code
cin >> n >> q >> t >> m;
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back({v, 0});
adj[v].push_back({u, 0});
}
up[0][1] = 0;
depth[1] = 0;
DFS_LCA(1, 1);
construct_LCA();
for (int i = 1; i <= q; i++) {
cin >> queries[i].u >> queries[i].v >> queries[i].k;
queries[i].lca = LCA(queries[i].u, queries[i].v);
}
for (int i = 1; i <= t; i++) solve();
}
int main() {
Task();
Solve();
return 37^37;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBGTkFNRSAicXRyZWUiCgpjb25zdCBpbnQgTiA9IDFlNSArIDU7CmNvbnN0IGludCBMRyA9IDIwOwpjb25zdCBpbnQgTSA9IDk7CgpzdHJ1Y3QgUXVlcnkgewogICAgaW50IHUsIHY7CiAgICBpbnQgazsKICAgIGludCBsY2E7Cn07CgppbnQgbiwgcSwgdCwgbTsKdmVjdG9yPHBhaXI8aW50LGludD4+IGFkaltOXTsKUXVlcnkgcXVlcmllc1tOICogNV07CmludCBkZXB0aFtOXTsKaW50IHVwW0xHXVtOXTsKaW50IHBbTl07CmludCBkcFtOXVtNXTsKCnZvaWQgVGFzaygpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbig5KTsKICAgIGlmIChmb3BlbihGTkFNRSIuaW5wIiwiciIpKSB7CiAgICAgICAgZnJlb3BlbihGTkFNRSIuaW5wIiwiciIsc3RkaW4pOwogICAgICAgIGZyZW9wZW4oRk5BTUUiLm91dCIsInciLHN0ZG91dCk7CiAgICB9Cn0KCnZvaWQgREZTX0xDQShpbnQgdSwgaW50IHBhcikgewogICAgZm9yIChhdXRvIGUgOiBhZGpbdV0pIHsKICAgICAgICBpbnQgdiA9IGUuZmlyc3Q7CiAgICAgICAgaWYgKHYgXiBwYXIpIHsKICAgICAgICAgICAgdXBbMF1bdl0gPSB1OwogICAgICAgICAgICBkZXB0aFt2XSA9IGRlcHRoW3VdICsgMTsKICAgICAgICAgICAgREZTX0xDQSh2LCB1KTsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgY29uc3RydWN0X0xDQSgpIHsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgTEc7IGkrKykgewogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG47IGorKykgewogICAgICAgICAgICB1cFtpXVtqXSA9IHVwW2kgLSAxXVt1cFtpIC0gMV1bal1dOwogICAgICAgIH0KICAgIH0KfQoKaW50IExDQShpbnQgdSwgaW50IHYpIHsKICAgIGlmIChkZXB0aFt1XSA8IGRlcHRoW3ZdKSBzd2FwKHUsIHYpOwogICAgZm9yIChpbnQgaSA9IExHIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBpZiAoZGVwdGhbdV0gLSAoMSA8PCBpKSA+PSBkZXB0aFt2XSkgewogICAgICAgICAgICB1ID0gdXBbaV1bdV07CiAgICAgICAgfQogICAgfQogICAgaWYgKHUgPT0gdikgcmV0dXJuIHU7CiAgICBmb3IgKGludCBpID0gTEcgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIGlmICh1cFtpXVt1XSAhPSB1cFtpXVt2XSkgewogICAgICAgICAgICB1ID0gdXBbaV1bdV07CiAgICAgICAgICAgIHYgPSB1cFtpXVt2XTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gdXBbMF1bdV07Cn0KCnZvaWQgREZTX2NhbGMoaW50IHUsIGludCBwYXIpIHsKICAgIGZvciAoYXV0byAmZSA6IGFkalt1XSkgewogICAgICAgIGlmIChlLmZpcnN0IF4gcGFyKSB7CiAgICAgICAgICAgIERGU19jYWxjKGUuZmlyc3QsIHUpOwogICAgICAgICAgICBlLnNlY29uZCA9IHBbZS5maXJzdF07CiAgICAgICAgICAgIHBbdV0gKz0gcFtlLmZpcnN0XTsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgREZTX0RQKGludCB1LCBpbnQgcGFyKSB7CiAgICBmb3IgKGF1dG8gZSA6IGFkalt1XSkgewogICAgICAgIGludCB2ID0gZS5maXJzdDsKICAgICAgICBpbnQgdyA9IGUuc2Vjb25kOwogICAgICAgIGlmICh2IF4gcGFyKSB7CiAgICAgICAgICAgIERGU19EUCh2LCB1KTsKICAgICAgICAgICAgZm9yIChpbnQgeCA9IG07IHggPj0gMTsgeC0tKSB7CiAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHg7IHkrKykgewogICAgICAgICAgICAgICAgICAgIGRwW3VdW3hdID0gbWF4KGRwW3VdW3hdLCBkcFt2XVt5XSArIGRwW3VdW3ggLSB5IC0gMV0gKyBlLnNlY29uZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnZvaWQgc29sdmUoKSB7CiAgICBtZW1zZXQocCwgMCwgc2l6ZW9mKHApKTsKICAgIGludCBsLCByOwogICAgY2luID4+IGwgPj4gcjsKICAgIGZvciAoaW50IGkgPSBsOyBpIDw9IHI7IGkrKykgewogICAgICAgIHBbcXVlcmllc1tpXS51XSArPSBxdWVyaWVzW2ldLms7CiAgICAgICAgcFtxdWVyaWVzW2ldLnZdICs9IHF1ZXJpZXNbaV0uazsKICAgICAgICBwW3F1ZXJpZXNbaV0ubGNhXSAtPSBxdWVyaWVzW2ldLmsgKiAyOwogICAgfQogICAgREZTX2NhbGMoMSwgMSk7CiAgICBtZW1zZXQoZHAsIDAsIHNpemVvZihkcCkpOwogICAgREZTX0RQKDEsIDEpOwogICAgaW50IGFucyA9IDA7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGFucyA9IG1heChhbnMsIGRwW2ldW21dKTsKICAgIGNvdXQgPDwgYW5zIDw8ICdcbic7Cn0KCnZvaWQgU29sdmUoKSB7CiAgICAvL1lvdXIgQ29kZQogICAgY2luID4+IG4gPj4gcSA+PiB0ID4+IG07CiAgICBmb3IgKGludCBpID0gMTsgaSA8IG47IGkrKykgewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh7diwgMH0pOwogICAgICAgIGFkalt2XS5wdXNoX2JhY2soe3UsIDB9KTsKICAgIH0KICAgIHVwWzBdWzFdID0gMDsKICAgIGRlcHRoWzFdID0gMDsKICAgIERGU19MQ0EoMSwgMSk7CiAgICBjb25zdHJ1Y3RfTENBKCk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBxOyBpKyspIHsKICAgICAgICBjaW4gPj4gcXVlcmllc1tpXS51ID4+IHF1ZXJpZXNbaV0udiA+PiBxdWVyaWVzW2ldLms7CiAgICAgICAgcXVlcmllc1tpXS5sY2EgPSBMQ0EocXVlcmllc1tpXS51LCBxdWVyaWVzW2ldLnYpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gdDsgaSsrKSBzb2x2ZSgpOwp9CgppbnQgbWFpbigpIHsKICAgIFRhc2soKTsKICAgIFNvbHZlKCk7CiAgICByZXR1cm4gMzdeMzc7Cn0K