#include<cstdio>
#include<queue>
using namespace std;
const int N=5e5+10;
struct node{
int v,w,next;
}e[N<<2];
int n,ml,md,tot,head[N],in[N],dis[N];
bool vis[N];
void add(int x,int y,int z){
e[++tot].v=y;
e[tot].w=z;
e[tot].next=head[x];
head[x]=tot;
}
inline int spfa(){
for(int i=1;i<=n;i++) dis[i]=0x3f3f3f3f;
dis[1]=0;
vis[1]=1;
in[1]=1;
queue<int>q;
q.push(1);
while(!q.empty()){
int h=q.front();q.pop();
vis[h]=0;
for(int i=head[h];i;i=e[i].next){
int v=e[i].v,w=e[i].w;
if(dis[v]>dis[h]+w){
dis[v]=dis[h]+w;
if(!vis[v]){
vis[v]=1;
if(++in[v]==n) return -1;
q.push(v);
}
}
}
}
if(dis[n]==0x3f3f3f3f) return -2;
return dis[n];
}
int main(){
scanf("%d%d%d",&n,&ml,&md);
for(int i=1,x,y,z;i<=ml;i++) scanf("%d%d%d",&x,&y,&z),add(x,y,z);
for(int i=1,x,y,z;i<=md;i++) scanf("%d%d%d",&x,&y,&z),add(y,x,-z);
printf("%d",spfa());
return 0;
}