#include #include #include #include #include #include #include #include #define rep(i, a) FOR(i, 0, a) #define FOR(i, a, b) for(int i = a; i < b; ++i) typedef long long ll; typedef unsigned long long ull; typedef std::pair P; struct edge{ int to, time, cost; }; const int max = 51; const int inf = (int)1e+9; int n, c; //P cost[max]; std::vector node[max]; int ans = inf; void dfs(int i, int j, int k){ if (i == n - 1){ if (j < ans && k <= c)ans = j; } rep(p, node[i].size())dfs(node[i][p].to, j + node[i][p].time, k + node[i][p].cost); } int main(){ int v; int s[51], t[51], y[51], m[51]; std::cin >> n >> c >> v; rep(i, v)std::cin >> s[i]; rep(i, v)std::cin >> t[i]; rep(i, v)std::cin >> y[i]; rep(i, v)std::cin >> m[i]; rep(i, v){ edge a; a.to = t[i] - 1; a.cost = y[i]; a.time = m[i]; node[s[i] - 1].push_back(a); } dfs(0, 0, 0); std::cout << (ans == inf ? -1 : ans) << std::endl; return 0; }