#include <iostream>
using namespace std;
int n,m,l,s,t,jj[16],e[16],INF=1e+9;
int G[300][300],paths[17][17],dp[1<<17][17];
int main(){
	while(true){
		for(int i=0;i<300;i++){
			for(int j=0;j<300;j++){
				G[i][j]=INF;
				if(i==j) G[i][j]=0;
			}
		}
		cin >> n >> m >> l >> s >> t;
		s--;
		if(!n) break;
		for(int i=0;i<m;i++){
			int a,b,c;
			cin >> a >> b >> c;
			a--;b--;
			G[a][b]=c;G[b][a]=c;
		}
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				for(int k=0;k<n;k++){
					G[j][k]=min(G[j][k],G[j][i]+G[i][k]);
				}
			}
		}
		for(int i=0;i<l;i++){
			cin >> jj[i] >> e[i];
			jj[i]--;
		}
		for(int i=0;i<l;i++){
			for(int j=0;j<l;j++){
				paths[i+1][j+1]=G[jj[i]][jj[j]]+e[j];
				if(i==j) paths[i+1][j+1]=0;
			}
		}
		for(int i=0;i<l;i++){
			paths[0][i+1]=G[s][jj[i]]+e[i];
			paths[i+1][0]=G[s][jj[i]];
		}
		paths[0][0]=0;
		for(int i=0;i<(1<<17);i++){
			for(int j=0;j<17;j++){
				dp[i][j]=INF;
			}
		}
		int ans=0;
		dp[1][0]=0;
		for(int i=0;i<(1<<(l+1));i++){
			for(int j=0;j<l+1;j++){
				if((i&(1<<j))==0) continue;
				for(int k=0;k<l+1;k++){
					if((i&(1<<k))==0) continue;
					dp[i][j]=min(dp[i][j],dp[i-(1<<j)][k]+paths[k][j]);
				}
//				cout <<"       "<< i << " " << j << " " << dp[i][j] << endl;
				if(dp[i][j]+paths[j][0]>t) continue;
				else{
					int tmp=i,hoge=-1;
					while(tmp>0){
						hoge+=(tmp%2);
						tmp/=2;
					}
					ans=max(ans,hoge);
				}
			}
		}
		cout << ans << endl;
	}
	return 0;
}