#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int dp[55][330]; int s[1550], t[1550], y[1550], m[1550]; vector>> vec(55); int main() { int n, co, v; cin >> n >> co >> v; for (int i = 0; i < v; i++) { cin >> s[i]; } for (int i = 0; i < v; i++) { cin >> t[i]; } for (int i = 0; i < v; i++) { cin >> y[i]; } for (int i = 0; i < v; i++) { cin >> m[i]; } for (int i = 0; i < v; i++) { vec[s[i]].emplace_back(make_tuple(t[i], y[i], m[i])); } for (int i = 1; i <= n; i++) { for (int j = 0; j <= co; j++) { dp[i][j] = 1000000007; } } dp[1][0] = 0; priority_queue, vector>, greater>> que; que.push(make_tuple(0, 0, 1)); while (!que.empty()) { tuplet = que.top(); que.pop(); int x = get<2>(t); int y = get<1>(t); int z = get<0>(t); for (int i = 0; i < vec[x].size(); i++) { t = vec[x][i]; int a = get<0>(t); int b = get<1>(t); int c = get<2>(t); if (y + b <= co && dp[a][y + b] > dp[x][y] + c) { que.push(make_tuple(z + c, y + b, a)); dp[a][y + b] = dp[x][y] + c; } } } int ans = 1000000007; for (int i = 0; i <= co; i++) { if (ans > dp[n][i]) { ans = dp[n][i]; } } if (ans == 1000000007) { cout << "-1" << endl; } else { cout << ans << endl; } }