#include <bits/stdc++.h>
#define pii pair<int,int>
#define ll long long
using namespace std;
const int MAX=1e5+5;
const int LOG=20;
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;
pair<ll,pii> edg[MAX];
vector<pair<ll,int>> adj[MAX];
ll le[LOG][MAX]; // Longest edge
ll lei[LOG][MAX]; // Longest edge index
int up[LOG][MAX];
int dst[MAX];
void dfs0(int x,int p,int d){
up[0][x]=p;
dst[x]=d;
for (auto [w,y]:adj[x]) if (y!=p) le[0][y]=w,lei[0][y]=y,dfs0(y,x,d+1);
}
inline void ch(ll& ans,int& i,int k,int a){
if (le[k][a]>ans) ans=le[k][a],i=lei[k][a];
}
int lcae(int a,int b){
if (dst[b]>dst[a]) swap(a,b);
ll ans=0;
int i;
for (int k=LOG-1;k>=0;k--) if (dst[up[k][a]]>=dst[b]) ch(ans,i,k,a),a=up[k][a];
for (int k=LOG-1;k>=0;k--) if (up[k][a]!=up[k][b]) ch(ans,i,k,a),ch(ans,i,k,b),a=up[k][a],b=up[k][b];
if (a!=b) ch(ans,i,0,a),ch(ans,i,0,b),a=up[0][a],b=up[0][b];
return i;
}
bool X[MAX];
int rt[MAX];
void dfs1(int x,int p,int a){
rt[x]=a;
for (auto [_,y]:adj[x]) if (y!=p&&!X[y]) dfs1(y,x,a);
}
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}};
}
sort(edg,edg+M);
ll tot=0;
for (int i=0;i<M;i++){
auto [w,pr]=edg[i];
auto [a,b]=pr;
if (ud->qry(a)==ud->qry(b)) continue;
adj[a].push_back({w,b});
adj[b].push_back({w,a});
ud->mrg(a,b);
tot+=w;
}
dfs0(0,0,0);
for (int k=1;k<LOG;k++) for (int i=0;i<N;i++){
int p=up[k-1][i];
up[k][i]=up[k-1][p];
if (le[k-1][i]>le[k-1][p]) le[k][i]=le[k-1][i],lei[k][i]=lei[k-1][i];
else le[k][i]=le[k-1][p],lei[k][i]=lei[k-1][p];
}
while (Q--){
int x,y;cin>>x>>y;
fill_n(rt,N,x);
fill_n(X,N,0);
ll ans=tot;
for (int a=x+1;a<=y;a++){
int v=lcae(a,rt[a]);
ans-=le[0][v];
dfs1(v,up[0][v],a);
X[a]=1;
}
cout<<ans<<'\n';
}
}