void main() { enum INF = 10 ^^ 9; const N = readInt; const C = readInt; const V = readInt; auto S = new int[V]; auto T = new int[V]; auto Y = new int[V]; auto M = new int[V]; foreach (i; 0 .. V) S[i] = readInt; foreach (i; 0 .. V) T[i] = readInt; foreach (i; 0 .. V) Y[i] = readInt; foreach (i; 0 .. V) M[i] = readInt; auto G = new int[][](N, 0); foreach (i; 0 .. V) { S[i]--, T[i]--; G[S[i]] ~= i; } auto dp = new int[][](N, C + 1); foreach (i; 0 .. N) foreach (j; 0 .. C + 1) dp[i][j] = INF; dp[0][0] = 0; foreach (i; 0 .. N) foreach (j; 0 .. C) foreach (k; G[i]) { if (j + Y[k] > C) continue; chmin(dp[T[k]][j + Y[k]], dp[i][j] + M[k]); } int ans = INF; foreach (i; 0 .. C + 1) chmin(ans, dp[N - 1][i]); if (ans == INF) ans = -1; ans.writeln; } import std,core.bitop; string[]_R; string readString(){while(_R.empty){_R=readln.chomp.split;}auto ret=_R.front;_R.popFront;return ret;} int readInt(){return readString.to!int;} long readLong(){return readString.to!long;} ulong readULong(){return readString.to!ulong;} real readReal(){return readString.to!real;} bool chmin(T)(ref T A,T B){if(A>B){A=B;return true;}else{return false;}} bool chmax(T)(ref T A,T B){if(A1){int mid=(L+R)/2;(A[mid]1){int mid=(L+R)/2;(A[mid]<=x?L:R)=mid;}return R;}