#include #define rep(i,n) for(int i=0;i G[51]; int N, C, V; int S[1500], T[1500], Y[1500], M[1500]; int dp[51][301]; signed main() { cin >> N >> C >> V; rep(i,V) cin >> S[i]; rep(i,V) cin >> T[i]; rep(i,V) cin >> Y[i]; rep(i,V) cin >> M[i]; rep(i,V) { G[S[i]].push_back(edge(T[i], Y[i], M[i])); } rep(i,51) rep(j,301) dp[i][j] = INF; dp[1][C] = 0; for (int i=1; i<=N; i++) { for (int j=0; j<=300; j++) { if (dp[i][j] != INF) { for (int k=0; k= 0) { dp[ G[i][k].to ][ j - G[i][k].cost ] = min(dp[ G[i][k].to ][ j - G[i][k].cost ], dp[i][j] + G[i][k].time); } } } } } int ans = INF; for (int i=0; i<=300; i++) { ans = min(ans, dp[N][i]); } printf("%d\n", ans == INF ? -1 : ans); }