#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 i, int j) { return T[i] < T[j]; }); } 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 (dp[i][j] + Y[k] <= C) { dp[T[k]][dp[i][j] + Y[k]] = min(dp[T[k]][dp[i][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; }