#include "bits/stdc++.h" #define ALL(obj) (obj).begin(),(obj).end() #define RALL(obj) (obj).rbegin(),(obj).rend() #define REP(i, n) for(int i = 0; i < (int)(n); i++) #define REPR(i, n) for(int i = (int)(n); i >= 0; i--) #define FOR(i,n,m) for(int i = (int)(n); i < int(m); i++) using namespace std; typedef long long ll; const int MOD = 1e9 + 7; const int INF = MOD - 1; const ll LLINF = 4e18; struct Edge { int to,cost, time; }; vector> G; int n, c, v; ll dfs(int now,ll cost = 0) { if (cost > c) return LLINF; if (now == n - 1) return 0; ll ans = LLINF; for (Edge u : G[now]) { ll res = dfs(u.to, cost + u.cost); if (res == LLINF) continue; ans = min(ans,u.time+res); } return ans; } int main() { cin >> n >> c >> v; G.resize(n); vector s(v),t(v),y(v),m(v); REP(i, v) cin >> s[i]; REP(i, v) cin >> t[i]; REP(i, v) cin >> y[i]; REP(i, v) cin >> m[i]; REP(i, v) { G[s[i] - 1].push_back({t[i] - 1,y[i],m[i]}); } ll ans = dfs(0); if (ans == LLINF) { puts("-1"); } else { cout << ans << endl; } getchar(); getchar(); }