#include #define N 50 #define V 1500 struct DATE{ int s, t, y, m; }date[V]; struct NODE{ struct DATE *dv[V]; int vn; }node[N]; int gcost, gsizen, gsizev, gmin = -1; void createtree(void) { int i, j; for(i = 0; i < gsizev; i++){ j = date[i].s; node[j].dv[node[j].vn] = &date[i]; node[j].vn++; } return; } int trece1(int i, int cost, int time) { int j, ans; if(gsizen == i){ // printf("trece1 %d\n", time); if(gmin == -1 || time < gmin){ gmin = time; } return(gmin); } for(j = 0; j < node[i].vn; j++){ if(cost+node[i].dv[j]->y <= gcost){ ans = trece1(node[i].dv[j]->t, cost+node[i].dv[j]->y, time+node[i].dv[j]->m); } } return(gmin); } int trece(void) { trece1(1, 0, 0); return(gmin); } int main(int argc, const char * argv[]) { int i; // insert code here... scanf("%d", &gsizen); scanf("%d", &gcost); scanf("%d", &gsizev); for(i = 0; i < gsizev; i++){ scanf("%d", &date[i].s); } for(i = 0; i < gsizev; i++){ scanf("%d", &date[i].t); } for(i = 0; i < gsizev; i++){ scanf("%d", &date[i].y); } for(i = 0; i < gsizev; i++){ scanf("%d", &date[i].m); } // for(i = 0; i < gsizev; i++){ // printf("%d %d %d %d\n", date[i].s, date[i].t, date[i].y, date[i].m); // } createtree(); printf("%d\n", trece()); return 0; }