#include<bits/stdc++.h>
using namespace std;

int n,m,l,s,inf=1e5+1,t,a,c,b,ok;
int g[305][305],G[305][305],re;
int ind[25],cost[25],dp[20][(1<<18)];


int f(int cur,int vis){
if(dp[cur][vis]!=-1) return dp[cur][vis];
if((vis&(~(1<<cur)))==0) return dp[cur][vis]=G[l][cur]+cost[cur];
dp[cur][vis]=1e9;
for(int j=0;j<l;j++){
    if((j!=cur)&&(((1<<j)&vis)!=0)){
        dp[cur][vis]=min(dp[cur][vis],f(j,vis&(~(1<<cur)))+G[j][cur]);
    }
}
dp[cur][vis]+=cost[cur];
return dp[cur][vis];
}

int main(){
while(cin>>n>>m>>l>>s>>t){
    if(n+m+l+s+t==0) break;
    memset(dp,-1,sizeof(dp));s--;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++) g[i][j]=inf;
        g[i][i]=0;
    }
    for(int i=0;i<m;i++){
        cin>>a>>b>>c;
        a--;b--;
        g[a][b]=c;
        g[b][a]=c;
    }
    for(int k=0;k<n;k++){
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++)
                g[i][j]=min(g[i][k]+g[k][j],g[i][j]);
        }
    }
    for(int i=0;i<l;i++){
        cin>>ind[i]>>cost[i];
        ind[i]--;
    }
    for(int i=0;i<l;i++){
        G[i][l]=g[ind[i]][s];
        G[l][i]=g[ind[i]][s];
        for(int j=0;j<l;j++) G[i][j]=g[ind[i]][ind[j]];
    }
    re=0;
    for(int i=0;i<(1<<l);i++){
        int cnt=0;
        for(int j=0;j<l;j++) if(i&(1<<j)) cnt++;
        for(int j=0;j<l;j++){
            if(i&(1<<j)){
                if(f(j,i)+G[j][l]<=t) re=max(re,cnt);
            }
        }
    }
    cout<<re<<endl;
}
return 0;
}