#include <bits/stdc++.h>
using namespace std;
mt19937 timmy_loves_gambling(73);
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define readv(v) do { for(auto &i: v) cin >> i; } while(0)
#define _ << " " <<
#define lf "\n"
#define ll long long
#define ull unsigned long long
#define pii pair<int, int>
#define pll pair<long long, long long>
#define fi first
#define se second
template<typename... Args>
using vec = vector<Args...>;
#ifndef MARCO
bool dbg = 0;
#define infor(str, ...)
#define infof(str, ...)
#else
bool dbg = 1;
#define infor(str, ...) do { fprintf(stderr, str, ##__VA_ARGS__); } while(0)
#define infof(str, ...) do { fprintf(stderr, str "\n", ##__VA_ARGS__); } while(0)
#endif
vec<array<ll, 4>> Qsegment; // l, rl, rr, x
vector<ll> t, lazy;
void push(int v) {
for(int u=v*2; u<v*2+2; u++) {
t[u] += lazy[v];
lazy[u] += lazy[v];
}
lazy[v] = 0;
}
void add(int v, int l, int r, int ql, int qr, ll x) {
if(qr <= l || r <= ql) return;
if(ql <= l && r <= qr) {
t[v] += x;
lazy[v] += x;
return;
}
push(v);
int m = (l+r)/2;
add(v*2, l, m, ql, qr, x);
add(v*2+1, m, r, ql, qr, x);
}
ll get(int v, int l, int r, int q) {
if(r-l == 1) return t[v];
push(v);
int m = (l+r)/2;
if(q < m) return get(v*2, l, m, q);
return get(v*2+1, m, r, q);
}
struct Dsu {
vec<int> dsu;
vec<set<int>> st;
int n;
Dsu(int N) {
dsu.resize(N, -1);
st.resize(N);
t.resize(N*4);
lazy.resize(N*4);
n = N;
for(int i=0; i<N; i++)
st[i].emplace(i);
}
int rep(int v) {
if(dsu[v] < 0) return v;
return dsu[v] = rep(dsu[v]);
}
void join(int a, int b, ll x) {
a = rep(a);
b = rep(b);
assert(a != b);
if(dsu[a] > dsu[b]) swap(a, b);
infof("--------\nUNITING %d %d", a, b);
Qsegment.push_back({0, 0, n, x});
infof("pushed [0, 0 %d, %d]", n, x);
int h = 0;
int k = 0;
for(auto it = st[b].begin(); it != st[b].end(); it++) {
auto ar = st[a].upper_bound(*it);
if(ar != st[a].begin()) {
ar--;
Qsegment.push_back({k, h, *it, -x});
infof("pushed [%d, %d %d, %d]", k, h, *it, -x);
k = *ar+1;
h = *it;
ar++;
}
if(ar != st[a].end()) {
auto it2 = it;
while(it2 != st[b].end() && *it2 < *ar) it2++;
it2--;
Qsegment.push_back({k, h, *ar, -x});
infof("pushed [%d, %d %d, %d]", k, h, *ar, -x);
k = *it2+1;
h = *ar;
it = it2;
}
}
Qsegment.push_back({k, h, n, -x});
infof("pushed [%d, %d %d, %d]", k, h, n, -x);
dsu[a] += dsu[b];
dsu[b] = a;
for(auto &i: st[b]) st[a].emplace(i);
}
};
signed main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int N, M, Q; cin >> N >> M >> Q;
vec<array<ll, 3>> ed(M);
for(auto &[a, b, c]: ed) cin >> b >> c >> a;
sort(all(ed));
vec<pii> Qs(Q);
vec<int> idQ(Q);
iota(all(idQ), 0);
for(auto &[a, b]: Qs) {
cin >> a >> b;
}
sort(all(idQ), [&](int &i, int &j){return Qs[i] < Qs[j];});
ll mst = 0;
Dsu dsu(N);
for(auto &[c, a, b]: ed) {
if(dsu.rep(a) == dsu.rep(b)) continue;
dsu.join(a, b, c);
mst += c;
}
sort(all(Qsegment));
Qsegment.push_back({(ll)1.14e9, -73, -67, -0});
int p = 0;
vector<ll> ans(Q, mst);
for(auto &[l, rl, rr, x]: Qsegment) {
while(p < Q && Qs[idQ[p]].fi < l) {
ans[idQ[p]] -= get(1, 0, N, Qs[idQ[p]].se);
p++;
}
add(1, 0, N, rl, rr, x);
}
for(auto &i: ans) cout << i << lf;
}