#include using namespace std; struct road { int s, t, y, m; }; int main() { int n, c, v; cin >> n >> c >> v; vector r(v); for (int i = 0;i < v;i++) { cin >> r[i].s; } for (int i = 0;i < v;i++) { cin >> r[i].t; } for (int i = 0;i < v;i++) { cin >> r[i].y; } for (int i = 0;i < v;i++) { cin >> r[i].m; } queue q; q.push(road{ 0,1,0,0 }); int mi = 1000000000; while (!q.empty()) { road qf = q.front();q.pop(); for (int i = 0;i < v;i++) { if (qf.t == r[i].s) { if (qf.y+r[i].y <= c) { if (r[i].t == n) { mi = min(mi, qf.m+r[i].m); } else { q.push(road{ 0,r[i].t,qf.y + r[i].y,qf.m + r[i].m }); } } } } } cout << ((mi == 1000000000) ? -1 : mi) << endl; return 0; }