#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int INF = numeric_limits::max() / 2 - 1; int main() { typedef tuple edge; vector> G; int N, C, V; { cin >> N >> C >> V; vector S(V), T(V), Y(V), M(V); for (int i = 0; i < V; i++) { cin >> S[i]; S[i]--; } for (int i = 0; i < V; i++) { cin >> T[i]; T[i]--; } for (int i = 0; i < V; i++) { cin >> Y[i]; } for (int i = 0; i < V; i++) { cin >> M[i]; } G.assign(N, vector()); for (int i = 0; i < V; i++) { G[S[i]].push_back(edge(T[i], Y[i], M[i])); } } vector> dp(N, vector(C + 1, INF)); dp[0][C] = 0; for (int i = 0; i