#include using namespace std; const int INF = 1<<30; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m, c; cin >> n >> c >> m; vector s(m), t(m), y(m), w(m); for (int i = 0; i < m; i++) cin >> s[i]; for (int i = 0; i < m; i++) cin >> t[i]; for (int i = 0; i < m; i++) cin >> y[i]; for (int i = 0; i < m; i++) cin >> w[i]; vector > >edges(n); for (int i = 0; i < m; i++) { edges[s[i]-1].emplace_back(t[i]-1, y[i], w[i]); } vector > dist(n, vector(c+1, INF)); priority_queue, vector>, greater> > q; dist[0][c] = 0; q.emplace(0, 0, c); while (!q.empty()) { int cost, v, r; tie(cost, v, r) = q.top(); q.pop(); if (cost > dist[v][r]) continue; for (auto &[u, money, weight]: edges[v]) { if (r >= money && cost + weight < dist[u][r - money]) { dist[u][r - money] = cost + weight; q.emplace(dist[u][r - money], u, r - money); } } } int ret = *min_element(dist[n-1].begin(), dist[n-1].end()); if (ret == INF) ret = -1; cout << ret << endl; return 0; }