#include using namespace std; #define rep(i, n) for(int i=0; i #include int main() { int N, C, V; cin >> N >> C >> V; vector> path(N); vector T(V), Y(V), M(V); rep(i, 4) { rep(j, V) { if (i == 0) { int s; cin >> s; s--; path[s].push_back(j); } if (i == 1) { cin >> T[j]; T[j]--; } if (i == 2) { cin >> Y[j]; } if (i == 3) { cin >> M[j]; } } } vector>> ans(N); ans[0].push_back({ 0,0 }); rep(i, N - 1) { for (int x : path[i]) { for (pairp : ans[i]) { if (p.second + Y[x] <= C) { ans[T[x]].push_back({ p.first + M[x],p.second + Y[x] }); } } } } if (ans[N - 1].empty()) { cout << -1 << endl; } else { sort(ans[N - 1].begin(), ans[N - 1].end()); cout << ans[N - 1][0].first << endl; } }