#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;
#define fi first
#define se second
const int MAXN = 100005, MAXQ = 200005;
struct edge{
int u, v, c;
};
bool operator<(const edge& a, const edge& b){
return a.c < b.c;
}
struct inter{
int l, r, x;
inter(){
}
inter(int L, int R, int X){
l = L, r = R, x = X;
}
};
bool operator<(const inter& a, const inter& b){
return a.l < b.l;
}
bool operator>(const inter& a, const inter& b){
return a.l > b.l;
}
#define lsb(x) ((x) & (-(x)))
struct fenwick{
int arr[MAXN];
void update(int X, int V){
for(; X < MAXN; X += lsb(X)){
arr[X] += V;
}
}
int query(int X){
int ret = 0;
for(; X; X -= lsb(X)){
ret += arr[X];
}
return ret;
}
} fw;
int n, m, q;
set<int> s[MAXN];
int p[MAXN], ans[MAXQ];
edge el[MAXN];
deque<inter> il[MAXN];
inter ql[MAXQ];
int par(int x){
if(p[x] == x) return x;
return (p[x] = par(p[x]));
}
signed main(){
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> n >> m >> q;
for(int i=0; i<n; i++){
p[i] = i;
s[i] = {i};
}
for(int i=0, ui, vi, ci; i<m; i++){
cin >> ui >> vi >> ci;
el[i] = {ui, vi, ci};
}
sort(el, el+m);
int total = 0;
for(int i=0; i<m; i++){
auto [ui, vi, ci] = el[i];
ui = par(ui);
vi = par(vi);
if(ui == vi) continue;
total += ci;
if(s[ui].size() > s[vi].size()) swap(ui, vi);
int pj = -1;
for(auto j: s[ui]){
auto nj = s[ui].upper_bound(j);
auto l = s[vi].lower_bound(j);
if(l != s[vi].begin() && *l > pj){
l--;
il[i].emplace_back(*l, j, i);
}
auto r = s[vi].upper_bound(j);
if(r != s[vi].end() && (nj == s[ui].end() || *r < *nj)){
il[i].emplace_back(j, *r, i);
}
//cerr << pj << ' ' << j << ' ' << *nj << ':' << *l << ' ' << *r << '\n';
pj = j;
}
p[ui] = vi;
for(auto j: s[ui]){
s[vi].insert(j);
}
/*cerr << '\n' << i << '\n';
cerr << ui << ' ' << vi << ' ' << ci << '\n';
for(auto j: il[i]){
cerr << j.l << ',' << j.r << ' ';
}*/
}
priority_queue<inter, vector<inter>, greater<inter>> in;
for(int i=0; i<m; i++){
if(!il[i].size()) continue;
in.push(il[i].front());
fw.update(il[i].front().r, -el[i].c);
il[i].pop_front();
}
for(int i=0, li, ri; i<q; i++){
cin >> li >> ri;
ql[i] = {li, ri, i};
}
sort(ql, ql+q);
auto qlp = ql;
for(int i=0; i<n; i++){
inter cur;
while(in.size() && (cur = in.top()).l < i){
in.pop();
fw.update(cur.r, el[cur.x].c);
if(il[cur.x].size()){
in.push(il[cur.x].front());
fw.update(il[cur.x].front().r, -el[cur.x].c);
il[cur.x].pop_front();
}
}
while(qlp != ql+q && qlp->l == i){
ans[qlp->x] = fw.query(qlp->r);
qlp++;
}
}
for(int i=0; i<q; i++){
cout << total + ans[i] << '\n';
}
}