#include<bits/stdc++.h>
using namespace std;
struct node
{
int to,wi;
};
int dis[10005],in[10005],d,m,n,f,idx,s1,s2,wi;
vector <node> ve[10005];
queue <int> que;
void SPFA()
{
memset(dis,0x3f,sizeof(dis));
dis[1] = 0;
que.push(1);
in[1]=1;
while(que.empty()==0)
{
int v=que.front();
in[v]=0;
que.pop();
for(int i=0;i<ve[v].size();i++)
{
int u = ve[v][i].to;
if(dis[u]>dis[v]+ve[v][i].wi)
{
dis[u]=dis[v]+ve[v][i].wi;
if(in[u]==0)
{
que.push(u);
in[u]=1;
}
}
}
}
}
int main()
{
cin>>d>>m>>n>>f;
for(int i=1;i<=m;i++)
{
cin>>s1>>s2;
ve[s1].push_back(node{s2,-d});
}
for(int i=1;i<=f;i++)
{
cin>>s1>>s2>>wi;
ve[s1].push_back(node{s2,wi-d});
}
SPFA();
int ans=0x3f3f3f3f;
if(que.empty()>=1)
{
for(int i=1;i<=n;i++)
{
ans=min(ans,dis[i]);
}
cout<<-ans+d;
}
else
{
cout<<"orz";
}
return 0;
}