QWQ人麻了
#include<bits/stdc++.h>
#include<cstdlib>
#define int long long
#define db double
#define dw 0.998
#define For(i,a,b) for(int i(a);i<=b;++i)
#define foR(i,a,b) for(int i(a);i>=b;--i)
using namespace std;
inline void read(int &x){
x=0;char ch;bool w=0;ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=1; ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
if(w)x=-1*x;
}
inline void print(int x){
if(x<0){putchar('-');print(-x);return ;}
if(x>9)print(x/10);putchar(x%10+'0');
}
const int N=167,inf=0x3f3f3f3f;
int n,m,k,r[N],Head[N],To[N],Next[N],Val[N],cnt;
int dis[N],cg[N],nm[N],ans;
bool vis[N],c[N],nc[N];
void add(int x,int y,int z){
Next[++cnt]=Head[x];Head[x]=cnt;To[cnt]=y;Val[cnt]=z;
}
priority_queue< pair<int,int> > q;
void dij(){
memset(dis,0x3f,sizeof dis);
memset(vis,0,sizeof vis);
For(i,1,n)if(c[i]||nc[i])
dis[i]=0,q.push(make_pair(0,i));
while(!q.empty()){
int x=q.top().second;q.pop();
if(vis[x])continue;
vis[x]=1;
for(int i=Head[x];i;i=Next[i]){
int y=To[i];
if(dis[y]>dis[x]+Val[i]){
dis[y]=dis[x]+Val[i];
q.push(make_pair(-dis[y],y));
}
}
}
}
int random(int l,int r){
return rand()%(r-l+1)+l;
}
int l[N];
int HQ(){
int qwq=0;
dij();
For(i,1,n)qwq=max(qwq,dis[i]);
return qwq;
}
void SA(){
db t=4040;int x,y;
while(t>1e-15)
{
// cout<<"!"<<t<<endl;
x=random(1,k);//cg
y=random(1,n-k-m);//nm
nc[cg[x]]=0;nc[nm[y]]=1;
swap(cg[x],nm[y]);
int ne=HQ();
if(ne-ans<0){
ans=ne;
}
else {
if(exp((db)(ans-ne)/t)*RAND_MAX<=rand());
else{
swap(cg[x],nm[y]);
nc[cg[x]]=1;nc[nm[y]]=0;
}
}
t*=dw;
}
}
signed main(){
srand(time(0));
read(n);read(m);read(k);
For(i,1,n){
read(r[i]);r[i]++;
}
For(i,1,n){
int d;
read(d);
add(i,r[i],d);add(r[i],i,d);
}
For(i,1,m){
int x;read(x);x++;
c[x]=1;
}
ans=HQ();
if(m+k>=n){cout<<0;return 0;}
if(k==0){print(ans);return 0;}
int x=0,y=0;
For(i,1,n){
if(!c[i]){
if(x<k)cg[++x]=i,nc[i]=1;
else nm[++y]=i;
}
}
ans=HQ();
while((double)clock()<CLOCKS_PER_SEC<=0.6)
SA();
print(ans);return 0;
}