#include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; const int INF=0x3f3f3f3f; int s[1501],t[1501],y[1501],m[1501]; int dp[51][301];//dp[i][j]表示花费不超过j到达i所需的最短时间 //初值dp[1][j]=0,其他=正无穷 vector road[51];//road[i]保存到达i的所有边的编号 int main(){ int n,c,v; scanf("%d%d%d",&n,&c,&v); for(int i=1;i<=v;i++) scanf("%d",s+i); for(int i=1;i<=v;i++) { scanf("%d",t+i); road[t[i]].push_back(i); } for(int i=1;i<=v;i++) scanf("%d",y+i); for(int i=1;i<=v;i++) scanf("%d",m+i); memset(dp,INF,sizeof(dp)); for(int j=0;j<=c;j++) dp[1][j]=0; for(int i=2;i<=n;i++){ for(int j=0;j<=c;j++){ for(int k=0;k<(int)road[i].size();k++){ int p=road[i][k]; if(j