#include using namespace std; int main() { const int INF = 1 << 30; 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]].push_back(i); } for (int i = 0; i < N; i++) { sort(G[i].begin(), G[i].end(), [&] (int j, int k) { return T[j] < T[k]; }); } 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++) { for (int k: G[i]) { if (j + Y[k] <= C) { dp[T[k]][j + Y[k]] = min(dp[T[k]][j + Y[k]], dp[i][j] + M[k]); } } } } int ans = *min_element(dp[N - 1].begin(), dp[N - 1].end()); if (ans == INF) ans = -1; cout << ans << endl; return 0; }