#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e2+5,M=1e3+5;
int d,p,c,f,s;
int cnt,head[N],ans;
int dis[N],cnt1[N];
bool flag[N];
queue<int> q;
struct Edge {
int next,to,w;
} edge[M];
inline void add(int u,int v,int d) {
edge[++cnt].to=v;
edge[cnt].next=head[u];
edge[cnt].w=d;
head[u]=cnt;
}
void spfa(){
memset(dis,0xcf,sizeof(dis));
dis[s]=d,q.push(s);
while(!q.empty()){
int u=q.front();
q.pop();
flag[u]=0;
for(int i=head[u];i;i=edge[i].next){
int v=edge[i].to,ww=edge[i].w;
if(dis[v]<dis[u]+ww){
dis[v]=dis[u]+ww;
if(!flag[v]){
if(++cnt1[v]>=c){
f=1;
return;
}
flag[v]=1;
q.push(v);
}
}
}
}
}
signed main(){
cin>>d>>p>>c>>f>>s;
for(int i=1;i<=p;i++){
int x,y;
cin>>x>>y;
add(x,y,d);
}
for(int i=1;i<=f;i++){
int x,y,w;
cin>>x>>y>>w;
add(x,y,d-w);
}
spfa();
if(f==1){
cout<<-1;
return 0;
}
for(int i=1;i<=c;i++)
ans=max(ans,dis[i]);
cout<<ans;
return 0;
}