#include <bits/stdc++.h>
#define pii pair<int,int>
#define ll long long
using namespace std;
const int MAX=2e5+5;
const int LOG=20;
struct FT{
ll A[2*MAX];
ll qry(int x){
x++;
ll a=0;
while (x>0&&x<2*MAX) a+=A[x],x+=x&-x;
return a;
}
void upd(int x,ll a){
x++;
while (x>0&&x<2*MAX) A[x]+=a,x-=x&-x;
}
void upd(int x,int y,ll a){
upd(y,a);
upd(x-1,-a);
}
} *ft=new FT();
struct UFDS{
int par[MAX],sz[MAX];
UFDS(){
for (int i=0;i<MAX;i++) par[i]=i,sz[i]=0;
}
int qry(int x){
if (x==par[x]) return x;
return par[x]=qry(par[x]);
}
int mrg(int x,int y){
x=qry(x),y=qry(y);
if (x==y) return y;
if (sz[x]>sz[y]) swap(x,y);
if (sz[x]==sz[y]) sz[y]++;
par[x]=y;
return y;
}
} *ud=new UFDS();
int N,M,Q;
int C[MAX];
pair<ll,pii> edg[MAX];
vector<int> adj[MAX];
ll W[MAX];
set<int> *se[MAX];
vector<pii> E[MAX];
vector<pii> qs[MAX];
void dfs0(int x){
if (adj[x].size()==0){
se[x]=new set<int>;
se[x]->insert(x);
return;
}
int p=adj[x][0],q=adj[x][1];
dfs0(p),dfs0(q);
if (se[p]->size()>se[q]->size()) swap(p,q);
for (auto a:*se[p]){
auto it=se[q]->lower_bound(a);
if (it!=se[q]->end()) E[*it].push_back({a,x});
if (it!=se[q]->begin()) E[a].push_back({*prev(it),x});
}
se[x]=se[q];
for (auto a:*se[p]) se[x]->insert(a);
se[p]->clear();
}
int pre[MAX];
ll ans[MAX];
int main(){
ios::sync_with_stdio(0);cin.tie(0);
cin>>N>>M>>Q;
for (int i=0;i<M;i++){
int a,b;ll c;cin>>a>>b>>c;
edg[i]={c,{a,b}};
}
for (int i=0;i<Q;i++){
int l,r;cin>>l>>r;
qs[r].push_back({l,i});
}
sort(edg,edg+M);
ll tot=0;
int K=N;
for (int i=0;i<N;i++) C[i]=i;
for (int i=0;i<M;i++){
auto [w,pr]=edg[i];
auto [a,b]=pr;
a=ud->qry(a),b=ud->qry(b);
if (a==b) continue;
adj[K].push_back(C[a]);
adj[K].push_back(C[b]);
W[K]=w;
C[ud->mrg(a,b)]=K++;
tot+=w;
}
dfs0(K-1);
for (int i=0;i<N;i++){
for (auto [s,x]:E[i]){
if (s<pre[x]) continue;
ft->upd(pre[x],s,W[x]);
pre[x]=s+1;
}
for (auto [l,qi]:qs[i]) ans[qi]=ft->qry(l);
}
for (int i=0;i<Q;i++) cout<<tot-ans[i]<<'\n';
}