#include using namespace std; #define rep(i,n) for (int (i)=(0);(i)<(int)(n);++(i)) using ll = long long; const int inf = 1e8; pair dp[1502][1502]; int main() { int N, C, V; cin >> N >> C >> V; vector S(V), T(V), Y(V), M(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+1) rep(j, V+1) dp[i][j] = { inf, inf }; for (int i=1; i<=V; ++i) { dp[i][i] = { 0, 0 }; dp[S[i-1]][T[i-1]] = { M[i-1], Y[i-1] }; } for (int k=1; k<=V; ++k) { for (int i=1; i<=V; ++i) { for (int j=1; j<=V; ++j) { if (dp[i][k].second + dp[k][j].second <= C) { int t1 = dp[i][j].first; int t2 = dp[i][k].first + dp[k][j].first; int tt1 = dp[i][j].second; int tt2 = dp[i][k].second + dp[k][j].second; if (t1 == t2) { dp[i][j] = { t1, min(tt1, tt2) }; } else if (t1 < t2) { continue; } else { dp[i][j] = { t2, tt2 }; } } } } } cout << ( dp[1][N].first == inf ? -1 : dp[1][N].first) << endl; }