#include using namespace std; const int INF = 2e9; int main(){ int N, C, V; cin >> N >> C >> V; vector S(V), T(V), Y(V), M(V); for (int& x : S) cin >> x, x--; for (int& x : T) cin >> x, x--; for (int& x : Y) cin >> x; for (int& x : M) cin >> x; vector>> G(N); for (int i = 0; i < V; i++) G[S[i]].emplace_back(T[i], Y[i], M[i]); vector> dp(N, vector(C+1, INF)); dp[0][0] = 0; for (int i = 0; i < N; i++){ for (int j = 0; j <= C; j++){ if (dp[i][j] == INF) continue; for (auto [v, y, m] : G[i]){ if (j+y > C) continue; dp[v][j+y] = min(dp[v][j+y], dp[i][j]+m); } } } int ans = *min_element(dp[N-1].begin(), dp[N-1].end()); cout << (ans == INF? -1: ans) << endl; }