1 #include <iostream>
2 #include <cstdio>
3 #include <cmath>
4 #include <cstring>
5 #include <algorithm>
6 #include <queue>
7 #include <stack>
8 #include <vector>
9 #include <iomanip>
10 #include <climits>
11 using namespace std;
12 int n,m,s,inq[200],cnt[200];
13 double d[200];
14 double v;
15 struct node{
16 int to;
17 double h,s;
18 };
19 vector<node>e[200];
20 void add(int x,int y,double hui,double sh)
21 {
22 node a;
23 a.to=y;
24 a.h=hui;
25 a.s=sh;
26 e[x].push_back(a);
27 }
28 int spfa()
29 {
30 d[s]=v;inq[s]=1;cnt[s]++;
31 queue<int>q;
32 q.push(s);
33 while(!q.empty())
34 {
35 int now=q.front();q.pop();inq[now]=0;
36 for(int i=0;i<e[now].size();i++)
37 {
38 int t=e[now][i].to;
39 if(d[t]<(d[now]-e[now][i].s)*e[now][i].h)
40 {
41 d[t]=(d[now]-e[now][i].s)*e[now][i].h;
42 if(inq[t]==1)
43 continue;
44 inq[t]=1;
45 q.push(t);
46 cnt[t]++;
47 if(cnt[t]>n)
48 return 1;
49 }
50 }
51 }
52 return 0;
53 }
54 int main(int argc, char *argv[])
55 {
56 scanf("%d%d%d%lf",&n,&m,&s,&v);
57 for(int i=0;i<=n;i++)
58 {
59 d[i]=0;
60 inq[i]=0;
61 cnt[i]=0;
62 }
63 for(int i=0;i<m;i++)
64 {
65 int a,b;
66 double c,d,e,f;
67 scanf("%d%d%lf%lf%lf%lf",&a,&b,&c,&d,&e,&f);
68 add(a,b,c,d);
69 add(b,a,e,f);
70 }
71 if(spfa())
72 printf("YES\n");
73 else
74 printf("NO\n");
75 return 0;
76 }