#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
const ll inf = 1e10;
static inline ll diameter(const multiset<ll>& S) {
  if (S.size() == 1)
    return *S.rbegin();
  auto it1 = prev(S.end());
  ll a = *it1;
  auto it2 = prev(it1);
  ll b = *it2;
  return a + b;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  ll n, q, wlim;
  cin >> n >> q >> wlim;
  vector<ll> wts(n - 1);
  multiset<ll> S;
  for (ll i = 0; i < n - 1; ++i) {
    ll a, b, c;
    cin >> a >> b >> c;
    wts[i] = c;
    S.insert(c);
  }
  ll last = 0;
  while (q--) {
    ll d, e;
    cin >> d >> e;
    ll d1 = (d + last) % (n - 1);
    ll e1 = (e + last) % wlim;
    auto it = S.find(wts[d1]);
    S.erase(it);
    wts[d1] = e1;
    S.insert(e1);
    ll ans;
    if (n == 2) {
      ans = *S.rbegin();
    } else {
      ans = diameter(S);
    }
    cout << ans << '\n';
    last = ans;
  }
}
| # | 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... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |