/*
* 汇率问题: Bellman_Ford算法 , 判断正环
*
* 有个奇怪的问题: 如果把 d[i]初始化为 -inf 则 WA, 初始化为 0 或 -100 之类的值则AC~ 奇怪
*/
#include <iostream>
#include <cstring>
using namespace std;
const int maxN = 100 + 5;
int n, m, s;
double v, r[maxN][maxN], c[maxN][maxN], d[maxN];
void ini(){
for(int i=1; i<=n; i++)
d[i] = 0;
d[s] = v;
}
/*
bool relax(int lhs, int rhs){
double tmp = (d[lhs] - c[lhs][rhs]) * r[lhs][rhs];
if(tmp >= eps && d[rhs] < tmp + eps){
d[rhs] = tmp;
return 1;
}
return 0;
}
*/
bool Bellman_Ford(){
ini();
bool flag;
for(int i=1; i<=n; i++){
flag = 0;
for(int j=1; j<=n; j++){
for(int k=1; k<=n; k++){
if(r[j][k] >= 0)
if(d[k] < (d[j] - c[j][k]) * r[j][k]){
d[k] = (d[j] - c[j][k]) * r[j][k];
flag = 1;
}
}
}
if(!flag) break; //没有边能继续松弛
}
//判断正环
for(int j=1; j<=n; j++){
for(int k=1; k<=n; k++){
if(r[j][k] >= 0 && d[k] < (d[j] - c[j][k]) * r[j][k]){
return 1;
}
}
}
return 0;
}
int main(){
while(cin >> n >> m >> s >> v){
for(int i=0; i<=n; i++)
for(int j=0; j<=n; j++)
r[i][j] = -1;
int a, b;
for(int i=1; i<=m; i++){
cin >> a >>b;
cin >> r[a][b] >> c[a][b] >> r[b][a] >> c[b][a];
}
if(Bellman_Ford())
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}