#include using namespace std; const int INF = 1 << 30; template bool chmin(T &a, const T &b) { if (a > b) { a = b; return true; } return false; } int main() { ios::sync_with_stdio(false); cin.tie(0); int N, C, V; cin >> N >> C >> V; vector S(V), T(V), Y(V), M(V); for (int i = 0; i < V; i++) { cin >> S[i]; S[i]--; } for (int i = 0; i < V; i++) { cin >> T[i]; T[i]--; } for (int i = 0; i < V; i++) { cin >> Y[i]; } for (int i = 0; i < V; i++) { cin >> M[i]; } vector> G(N); for (int i = 0; i < V; i++) { G[S[i]].emplace_back(i); } vector> D(N, vector(C + 1, INF)); D[0][0] = 0; priority_queue>, vector>>, greater>>> que; que.push(make_pair(0, make_pair(0, 0))); while (!que.empty()) { auto q = que.top(); que.pop(); int d = q.first, c = q.second.first, u = q.second.second; if (D[u][c] < d) continue; for (int i : G[u]) { int v = T[i], dd = M[i], dc = Y[i]; if (c + dc > C) continue; if (chmin(D[v][c + dc], d + dd)) { que.push(make_pair(D[v][c + dc], make_pair(c + dc, v))); } } } if (*min_element(D[N - 1].begin(), D[N - 1].end()) == INF) { cout << -1 << '\n'; } else { cout << *min_element(D[N - 1].begin(), D[N - 1].end()) << '\n'; } return 0; }