#include #include #include #include #include #include #include using namespace std; #define FOR(i,a,b) for (int i=(a);i<(b);i++) #define FORR(i,a,b) for (int i=(b)-1;i>=(a);i--) #define REP(i,n) for (int i=0;i<(n);i++) #define RREP(i,n) for (int i=(n)-1;i>=0;i--) #define pb push_back #define ALL(a) (a).begin(),(a).end() #define PI 3.1415926535 typedef long long ll; typedef pair P; //typedef complex C; const int INF = 99999999; const int MAX_N = 50; const int MAX_E = 1500; int N, C, E; int S[MAX_E], T[MAX_E], Y[MAX_E], M[MAX_E]; void input() { cin >> N >> C >> E; REP(i, E) { cin >> S[i]; S[i]--; } REP(i, E) { cin >> T[i]; T[i]--; } REP(i, E) cin >> Y[i]; REP(i, E) cin >> M[i]; } void solve() { vector>> e(N); REP(i, E) { e[S[i]].pb(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]); } if (ans == INF) { cout << -1 << endl; } else { cout << ans << endl; } } int main() { input(); solve(); }