#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define BET(a,b,c) ((a)<=(b)&&(b)<(c)) #define FOR(i,n) for(int i=0,i##_end=(int(n));i VI; typedef vector VVI; int dp[50][301]; void updateMin(int&v, int x){ if(v > x) v = x; } int main() { int N,C,V; cin>>N>>C>>V; VI S(V),T(V),Y(V),M(V); FOR(i,V) scanf("%d",&S[i]); FOR(i,V) scanf("%d",&T[i]); FOR(i,V) scanf("%d",&Y[i]); FOR(i,V) scanf("%d",&M[i]); FOR(i,V) { S[i]--; T[i]--; } const int inf = 1<<29; FOR(i,N) FOR(j,C+1) dp[i][j] = inf; dp[0][0] = 0; FOR(i,N){ FOR(j,V){ if(S[j] != i) continue; for(int c=C;c>=0;c--){ if(c + Y[j] <= C){ updateMin(dp[T[j]][c+Y[j]], dp[S[j]][c] + M[j]); } } } } int ans = inf; FOR(i,C+1) ans = min(ans, dp[N-1][i]); if(ans >= inf) ans = -1; cout<