#include #include #include #include #include #include using namespace std; struct Edge { long long end; long long cmp; long long points; }; long long N, M, K; long long djikstra(long long s, vector>& graph) { priority_queue, vector>, less>> q; vector visited(N); vector dist(N); dist[s] = 0; q.push({ 0, s }); while (!q.empty()) { auto c = q.top(); q.pop(); visited[c.second] = true; for (Edge& e : graph[c.second]) { if (visited[e.end]) continue; long long nd = dist[c.second] + e.cmp; if (dist[e.end] == 0 || nd > dist[e.end]) { dist[e.end] = nd; q.push({ nd, e.end }); } } } return dist[N-1]; } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N >> M >> K; vector> graph(N, vector()); for (long long i = 0; i < M; i++) { long long k1, k2, pi, ti; cin >> k1 >> k2 >> pi >> ti; k1--; k2--; graph[k1].push_back({ k2, pi - ti, pi }); graph[k2].push_back({ k1, pi - ti, pi }); } cout << K + djikstra(0, graph); }