#include <iostream>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;


int lep[100005],pa[100005],pb[100005];
struct maca{int c,d;};
vector<maca> mg[100005];

int dfs(int cvor,int t)
{
    int i,x,r=0;

    for(i=0;i<mg[cvor].size();i++)
    {
        x=mg[cvor][i].c;
        if(t>=mg[cvor][i].d)  r=max(r,dfs(x,t-mg[cvor][i].d)+lep[cvor]);
    }

    if(r==0) r=lep[cvor];
    return r;
}

int main()
{
    ios::sync_with_stdio(false);

    int n,t,i,j,x,y,res=0;
    maca mjau;

    cin>>n>>t;
    for(i=1;i<=n;i++) cin>>lep[i];

    for(i=1;i<=n;i++) cin>>pa[i];
    for(i=1;i<=n;i++) cin>>pb[i];

    for(i=1;i<=n;i++)
    {
        x=pa[i]; y=pb[i];
        mjau.c=i; mjau.d=y;

        mg[x].push_back(mjau);
    }


    for(i=1;i<=n;i++)
    {
        res=max(res,dfs(i,t));

        //cout<<i<<" "<<t<<" "<<dfs(i,t)<<endl;
    }

    cout<<res;

    /*
    5 7
    7 3 1 4 8
    4 3 5 2 1
    3 2 4 1 7

    6 200
    1 1 1 1 1 100
    3 1 2 5 4 5
    1 1 1 10 10 1

    */


    return 0;
}