#include<bits/stdc++.h>
#define Maxn 10000000
using namespace std;
priority_queue< pair<int,int> > q;
int head[Maxn],ver[Maxn],edge[Maxn],Next[Maxn],x,s,i,y,z,D,P,C,F,S,l;
int tot,n,m,d[Maxn];
bool v[Maxn];
void add(int x,int y,int z){
ver[++tot]=y,edge[tot]=z;
Next[tot]=head[x],head[x]=tot;
}
void asd(int s){
for(int w=1;w<=C;w++){
d[w]=-1;
}
d[s]=D;
q.push(make_pair(0,s));
while(!q.empty()){
x=q.top().second;
q.pop();
if(v[x]) continue;
v[x]=1;
for(int i=head[x];i;i=Next[i]){
int y=ver[i],z=edge[i];
if(d[y]<d[x]+z){
d[y]=d[x]+z;
q.push(make_pair(d[y],y));
}
}
}
}
int main(){
cin>>D>>P>>C>>F>>S;
for(i=1;i<=P;i++){
cin>>x>>y;
add(x,y,D);
}
for(i=1;i<=F;i++){
cin>>x>>y>>z;
add(x,y,D-z);
}
asd(S);
for(i=1;i<=C;i++)
l=max(l,d[i]);
cout<<max(-1,l);
return 0;
}