// max -> 最短路
// 奶牛排在队伍中的顺序和它们的编号是相同的。 x[i]<=x[i+1] i+1->i w=0
// x[b]-x[a]<=L x[b]<=x[a]+L a->b w=L
// x[b]-x[a]>=D x[a]<=x[b]-D b->a w=-D
//判-1就是check 负环 全部放进去跑一遍即可
//判-2就是看他跑完最短路之后dist[n]
#include<bits/stdc++.h>
using namespace std;
int n,m1,m2,dist[10010],st[10010],cnt[10010];
vector<pair<int,int>>g[10010];
bool spfa(int x){
queue<int>q;
memset(dist,0x3f,sizeof dist);
for(int i=1;i<=n;i++)cnt[i]=st[i]=0;
for(int i=1;i<=x;i++){
q.push(i);
dist[i]=0;
}
while(q.size()){
auto u=q.front();q.pop();
//cout<<dist[u]<<' '<<u<<endl;
if(st[u])continue;
st[u]=1;
for(auto [v,w]:g[u]){
if(dist[v]>dist[u]+w){
dist[v]=dist[u]+w;
cnt[v]=cnt[u]+1;
if(cnt[v]>=n)return true;
q.push(v);
st[v]=0;
}
}
}
return false;
}
int main(){
cin>>n>>m1>>m2;
for(int i=1;i<n;i++){
g[i+1].push_back({i,0});
}
while(m1--){
int a,b,w;cin>>a>>b>>w;
g[a].push_back({b,w});
}
while(m2--){
int a,b,w;cin>>a>>b>>w;
g[b].push_back({a,-w});
}
if(spfa(n)){
cout<<-1<<endl;
return 0;
}
spfa(1);
if(dist[n]!=0x3f3f3f3f)cout<<dist[n]<<endl;
else cout<<-2<<endl;
return 0;
}