#include using namespace std; #ifdef croquete // BEGIN TEMPLATE ----------------------| #include "dbg/dbg.h" #define fio freopen("in.txt", "r", stdin) #else #define dbg(...) #define fio cin.tie(0)->sync_with_stdio(0) #endif #define ll long long #define vll vector #define vvll vector #define pll pair #define vpll vector #define all(xs) xs.begin(), xs.end() #define rep(i, a, b) for (ll i = (a); i < (ll)(b); ++i) #define per(i, a, b) for (ll i = (a); i >= (ll)(b); --i) #define eb emplace_back #define cinj cin.iword(0) = 1, cin #define coutj cout.iword(0) = 1, cout template // read vector istream& operator>>(istream& is, vector& xs) { assert(!xs.empty()); rep(i, is.iword(0), xs.size()) is >> xs[i]; return is.iword(0) = 0, is; } template // print vector ostream& operator<<(ostream& os, vector& xs) { rep(i, os.iword(0), xs.size()) os << xs[i] << ' '; return os.iword(0) = 0, os; } void solve(); signed main() { fio; ll t = 1; // cin >> t; while (t--) solve(); } // END TEMPLATE --------------------------------------| // BEGIN EXTRAS -----------------------------------------| #define ull unsigned ll #define vvvll vector #define vvpll vector #define tll tuple #define vtll vector #define pd pair #define x first #define y second map ds1 { {'R', {0, 1}}, {'D', {1, 0}}, {'L', {0, -1}}, {'U', {-1, 0}} }; vpll ds2 { {0, 1}, {1, 0}, {0, -1}, {-1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1} }; vpll ds3 { {1, 2}, {2, 1}, {-1, 2}, {-2, 1}, {1, -2}, {2, -1}, {-1, -2}, {-2, -1} }; // END EXTRAS -------------------------------------------| ll dijkstra(const vector& g, ll s, ll c) { vvll ds(g.size(), vll(c + 1, LLONG_MAX)); priority_queue> pq; ds[s][0] = 0, pq.emplace(ds[s][0], 0, s); while (!pq.empty()) { auto [t, cc, u] = pq.top(); pq.pop(); if (t > ds[u][cc]) continue; for (auto [w, ccc, v] : g[u]) { ll nc = cc + ccc; if (nc <= c && t + w < ds[v][nc]) { ds[v][nc] = t + w; pq.emplace(ds[v][nc], nc, v); } } } return *min_element(all(ds.back())); } void solve() { ll n, c, v; cin >> n >> c >> v; vector g(n + 1); vll s(v), t(v), y(v), m(v); cin >> s >> t >> y >> m; rep(i, 0, v) g[s[i]].eb(m[i], y[i], t[i]); ll ans = dijkstra(g, 1, c); if (ans == LLONG_MAX) cout << "-1\n"; else cout << ans << '\n'; }