Spfa
#include<iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <set>
#include <map>
#include <functional>
#include <ctime>
#include <iomanip>
#include <numeric>
#include <sstream>
#include <algorithm>
#define ll long long
#define PI acos(-1)
#define mes(x,y) memset(x,y,sizeof(x))
#define lp pair<ll, ll>
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
const ll inf = 10000000000000005;
ll n, m, i, j, k = 0, t, w, flag, x, y, z, sum;
string s1, s2, s;
struct node {
ll futurekind; double rate,tax;
node(ll x, double y, double z) :futurekind(x), rate(y), tax(z) {}
};
vector <vector<node> >v;
double dis[110];
ll ismove[110], step[110];
bool Spfa(ll beginkind, double nowmoney) {
mes(dis, 0.0); mes(ismove, 0); mes(step, 0); queue<ll>que;
dis[beginkind] = nowmoney; que.push(beginkind);
while (!que.empty()) {
t = que.front(); que.pop(); ismove[t] = 0;
for (i = 0; i < v[t].size(); i++) {
double nn = (dis[t] - v[t][i].tax) * v[t][i].rate;
if (dis[v[t][i].futurekind] < nn) {
dis[v[t][i].futurekind] = nn;
if (ismove[v[t][i].futurekind] == 0) que.push(v[t][i].futurekind);
ismove[v[t][i].futurekind] = 1;
step[v[t][i].futurekind]++;
if (step[v[t][i].futurekind] > n)return true;
}
}
}
return false;
}
int main() {
double nowmoney;
cin >> n >> m >> k >> nowmoney;
for (i = 0, v.resize(n + 1); i < m; i++) {
double a, b, c, d;
cin >> x >> y >> a >> b >> c >> d;
v[x].push_back(node(y, a, b));
v[y].push_back(node(x, c, d));
}
cout << (Spfa(k, nowmoney) ? "YES" : "NO") << endl;
return 0;
}