---- From decoration
#include<bits/stdc++.h>
#define N 2005
#define M 5005*2
#define LL long long
using namespace std;
int first[N],next[M],to[M],w[M],tot;
int V,m,n,E,L,ans;
int s[N],a[N],t[N],b[N],vis[N];
int f[N][N];//到i,经过k个点的最小花费
int read(){
int cnt=0;char ch=0;
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))cnt=cnt*10+(ch-'0'),ch=getchar();
return cnt;
}
void add(int x,int y,int z){
next[++tot]=first[x],first[x]=tot,to[tot]=y,w[tot]=z;
}
void dfs(int u){
vis[u]=1;
f[u][1]=(b[u]==-1)? L+1:b[u];
for(int i=2;i<=V;i++) f[u][i]=L+1;
for(int i=first[u];i;i=next[i]){
int t=to[i];
if(!vis[t]) dfs(t);
for(int j=2;j<=V;j++)
f[u][j]=min(f[u][j],f[t][j-1]+w[i]);
}
}
int main(){
V=read(),m=read(),n=read(),E=read(),L=read();
for(int i=1;i<=V;i++) a[i]=b[i]=-1;
for(int i=1;i<=m;i++){
int s=read();a[s]=read();
}
for(int i=1;i<=n;i++){
int t=read();b[t]=read();
}
for(int i=1;i<=E;i++){
int x=read(),y=read(),z=read();
add(x,y,z);
}
for(int i=1;i<=V;i++){
if(a[i]!=-1){
if(!vis[i]) dfs(i);
for(int j=V;j>=1;j--)
if(f[i][j]+a[i]<=L)
ans=max(ans,j);
}
}
cout<<ans;return 0;
}