#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
#define F first
#define S second
#define g0 get<0>
#define g1 get<1>
#define g2 get<2>
const int N = 1e5+5 ;
const int M = 1e5+5 ;
const int Q = 2e5+5 ;
int n , m , q , par[N] , mark[N] ;
vector<pair<int,int>> nei[N] ;
vector<tuple<int,int,int>> edge ;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) ;
cin >> n >> m >> q ;
for(int i=0 ; i<m ; i++){
int a , b , c ; cin >> a >> b >> c ;
nei[a].push_back({b,c}) ; nei[b].push_back({a,c}) ;
edge.push_back({c,a,b}) ;
}
sort(edge.begin(),edge.end()) ;
auto p = [&] (int k , auto &self) -> int {
if(par[k]<0) return k ;
else return par[k] = self(par[k],self) ;
};
while(q--){
int le , ri ; cin >> le >> ri ;
memset(par,-1,sizeof(par)) ;
memset(mark,0,sizeof(mark)) ;
for(int i=le ; i<=ri ; i++) mark[i]=1 ;
ll sum = 0 ;
for(int i=0 ; i<m ; i++){
int u = g1(edge[i]) , v = g2(edge[i]) , pu = p(u,p) , pv = p(v,p) ;
if(pu==pv || (mark[pu] && mark[pv])) continue ;
sum += g0(edge[i]) ;
if(mark[pu]) par[pu]+=par[pv] , par[pv]=pu ;
else par[pv]+=par[pu] , par[pu]=pv ;
}
cout << sum << '\n' ;
}
return 0 ;
}