#include using i64 = long long; using u64 = unsigned long long; using u32 = unsigned; using u128 = unsigned __int128; using i128 = __int128; constexpr int inf = 1e9 + 7; struct Camino { int destino; int costo; int tiempo; }; void solve() { int N, C, V; std::cin >> N >> C >> V; std::vector S(V), T(V), Y(V), M(V); std::vector> adj(N + 1); for(int& x : S) std::cin >> x; for(int& x : T) std::cin >> x; for(int& x : Y) std::cin >> x; for(int& x : M) std::cin >> x; for(int i = 0; i < V; i ++) { adj[S[i]].push_back({T[i], Y[i], M[i]}); } std::vector dp(N + 1, std::vector (C + 1, inf)); dp[1][0] = 0; for(int i = 1; i <= N; i ++) { for(int j = 0; j <= C; j ++) { if(dp[i][j] == inf) continue; for(auto x : adj[i]) { if(j + x.costo <= C) { dp[x.destino][j + x.costo] = std::min(dp[x.destino][j + x.costo], dp[i][j] + x.tiempo); } } } } int ans = inf; for(int i = 0; i <= C; i ++) { ans = std::min(ans, dp[N][i]); } if(ans == inf) { std::cout << -1 << "\n"; }else std::cout << ans << "\n"; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int T = 1; //std::cin >> T; while (T--) { solve(); } return 0; }