#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define all(x) x.first(),x.second()
#define MAXN 100005

using namespace std;
int n,m;
int niz[MAXN];
int duz[MAXN];
int lep[MAXN];
bool ima[MAXN];
bool uciklusu[MAXN];
int obidjen[MAXN];

int dfs(int t,int dub){
    int res=lep[t];
    if(dub+duz[t]<=m)res+=dfs(niz[t],dub+duz[t]);
    return res;
}

int main()
{
    scanf("%d %d", &n, &m);
    for(int i=1;i<=n;i++)
        scanf("%d",lep+i);
    for(int i=1;i<=n;i++)
        scanf("%d",niz+i);
    for(int i=1;i<=n;i++)
        scanf("%d",duz+i);

    for(int i=1;i<=n;i++)
        ima[niz[i]]=true;
    int res=0;
    for(int i=1;i<=n;i++)res=max(res,dfs(i,0));
    printf("%d",res);

    return 0;
}