#include<bits/stdc++.h>
using namespace std;
const int Maxn=1e5+1;
const int Maxm=5e5+1;
inline int Read(){
int x=0;char ch=0;bool w=0;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return w?-x:x;
}
int n,m,S,T,G,Q;
int nxt[Maxm<<1],to[Maxm<<1],head[Maxn],val[Maxm<<1],tot;
int down[Maxn],up[Maxn],dis[Maxn];
bool vis[Maxn];
inline void add(int u,int v,int w){
++tot;
to[tot]=v;
val[tot]=w;
nxt[tot]=head[u];
head[u]=tot;
return ;
}
inline void Dijkstra(){
priority_queue<pair<int,int> >q;
q.push(make_pair(0,S));
dis[S]=0;
while(!q.empty()){
int u=q.top().second;
q.pop();
vis[u]=false;
for(int i=head[u];i;i=nxt[i]){
int v=to[i];
if(dis[u]+val[i]>G)continue;
if(dis[u]+val[i]<dis[v]){
if((dis[u]+val[i])*Q+down[u]<=up[u]){
dis[v]=dis[u]+val[i];
if(!vis[v]){
q.push(make_pair(-dis[v],v));
vis[v]=true;
}
}
else if(v==T){
dis[v]=dis[u]+val[i];
}
}
}
}
return ;
}
int main(){
n=Read(),m=Read(),S=Read(),T=Read(),G=Read(),Q=Read();
for(int i=1;i<=n;++i){
down[i]=Read();
up[i]=Read();
dis[i]=G+1;
}
for(int i=1;i<=m;++i){
int u=Read(),v=Read(),w=Read();
add(u,v,w);
add(v,u,w);
}
Dijkstra();
if(dis[T]<=G){
printf("%d\n",dis[T]);
}
else {
printf("wtnap wa kotori no oyatsu desu!");
}
return 0;
}