#include #include #include using namespace std; const double INF = 1e14; struct Edge { int v, u; double ln, s; }; int n, m; double t; vector g; double bellman_ford(double x) { vector d(n, INF); d[0] = 0; for (int i = 0; i < n; ++i) { for (const auto& e : g) { double len = (e.ln / (e.s + x)); if (d[e.u] < INF && d[e.v] >= d[e.u] + len) { d[e.v] = d[e.u] + len; } if (d[e.v] < INF && d[e.u] >= d[e.v] + len) { d[e.u] = d[e.v] + len; } } if (d[n - 1] <= t) { break; } } return d[n - 1]; } int main() { ios_base::sync_with_stdio(false); cin >> n >> m >> t; g.reserve(m); for (int i = 0; i < m; ++i) { int v, u; double ln, s; cin >> v >> u >> ln >> s; v--; u--; Edge e = {v, u, ln, s}; g.push_back(e); } double lf = 0, rg = INF; for (int i = 0; i < 80; ++i) { double mid = (lf + rg) / 2; if (bellman_ford(mid) <= t) { rg = mid; } else { lf = mid; } } cout.precision(10); cout << fixed << rg << endl; return 0; }