#include #include #include #define REP(i, n) for (int i = 0; i < n; ++i) const int INF = (int)1e9 + 7; using namespace std; int main() { int N, C, V; cin >> N >> C >> V; vector S(V), T(V), Y(V), M(V); REP(i,V) cin >> S[i], S[i]--; REP(i,V) cin >> T[i], T[i]--; REP(i,V) cin >> Y[i]; REP(i,V) cin >> M[i]; vector>> e(N); REP(i,V) e[S[i]].push_back(make_tuple(T[i], Y[i], M[i])); vector> dp(N, vector(C + 1, INF)); dp[0][C] = 0; REP(i,N) { REP(j,C+1) { if (dp[i][j] == INF) continue; for (auto k: e[i]) { int ni = get<0>(k); int nj = j - get<1>(k); int nd = dp[i][j] + get<2>(k); if (nj < 0) continue; dp[ni][nj] = min(dp[ni][nj], nd); } } } int ans = INF; REP(j,C+1) ans = min(ans, dp[N - 1][j]); cout << (ans == INF ? -1 : ans) << endl; }