#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<queue>
#include<map>
#include<stack>
#include<sstream>
#include<vector>
#include<string>
#include<set>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0);
#define REP(i,n) for(int i=0;i<n;++i)
int read(){
int r=0,f=1;char p=getchar();
while(p>'9'||p<'0'){if(p=='-')f=-1;p=getchar();}
while(p>='0'&&p<='9'){r=r*10+p-48;p=getchar();}return r*f;
}
typedef long long ll;
typedef unsigned long long ull;
const int Maxn = 1005;
const long long LINF = 1e18;
const int INF = 0x3f3f3f3f;
const int Mod = 1e6+7;
const double PI = acos(-1.0);
struct Edge {
int u,v,w;
} edges[10005];
struct Node {
int d,u;
Node (int dis,int from): d(dis),u(from) {}
bool operator < (const Node &a1) const {
return d < a1.d;
}
};
int dis1[Maxn],dis2[Maxn],N,M,S,E,K,T;
bool used[Maxn];
vector <int> G[Maxn];
vector <int> a;
void spfa (int s,int *dis) {
priority_queue<Node> qu;
for (int i = 1; i <= N; ++i) {
used[i] = false;
dis[i] = INF;
}
qu.push(Node (0,s));
dis[s] = 0;
while (!qu.empty()) {
Node tmp = qu.top(); qu.pop();
int x = tmp.u;
if(used[x]) continue;
used[x] = true;
for (int i = 0; i < G[x].size(); ++i) {
Edge &e = edges[G[x][i]];
if(dis[e.v] > dis[e.u]+e.w) {
dis[e.v] = dis[e.u]+e.w;
qu.push(Node(dis[e.v],e.v));
}
}
}
}
int main (void)
{
while (scanf("%d%d",&N,&M) != EOF) {
scanf("%d%d%d%d",&S,&E,&K,&T);
for (int i = 0; i <= N; ++i) G[i].clear();
int u,v;
for (int i = 1; i <= M; ++i) {
scanf("%d%d",&u,&v,&edges[i].w);
edges[i].u = u; edges[i].v = v;
G[u].push_back(i);
}
spfa(S,dis1); spfa(E,dis2); // dis1为起点到其他点的最短距离,dis2为终点到其他的最短距离
a.clear();
for (int i = 1; i <= N; ++i) {
if(dis1[i] == 0 || dis1[i] == INF) continue;
int m = G[i].size(); Edge e;
for (int j = 0; j < m; ++j) {
e = edges[G[i][j]];
a.push_back(dis1[i]+dis2[e.v]+e.w); // dis1的点与dis2的点连接,就是一条通路
}
}
sort(a.begin(),a.end());
if(a.size() >= K && a[K-1] <= T) printf("yareyaredawa\n");
else printf("Whitesnake!\n");
}
return 0;
}