#include #include #include #include #include using namespace std; using ll = long long; using P = pair; using tu = tuple; int main(void){ int n, c, v; cin >> n >> c >> v; vector s(v), t(v), y(v), m(v); for(int i=0; i> s[i], s[i]--; for(int i=0; i> t[i], t[i]--; for(int i=0; i> y[i]; for(int i=0; i> m[i]; vector>> to(n, vector>(n)); for(int i=0; i dist(n, {1e8, 1e8}); priority_queue, greater> dij; dij.emplace(0, 0, 0); dist[0]={0, 0}; while(dij.size()){ auto [time, cost, idx]=dij.top(); dij.pop(); if(dist[idx]!=P(time, cost)) continue; for(int i=0; ic) continue; if(dist[i]>P(time+dt, cost+dc)){ dist[i]=P(time+dt, cost+dc); dij.emplace(time+dt, cost+dc, i); } } } } if(dist[n-1].second<=c) cout << dist[n-1].first << endl; else cout << -1 << endl; return 0; }