#include <bits/stdc++.h>

using namespace std;

vector<pair<int,int>> graf[100001];
int lep[100001];
int pom[100001];
void grana(int i, pair<int,int> j)
{
    graf[i].push_back(j);
}
long long t,tren = 0, lepi = 0;
long long maks = LONG_MIN;
void dfs(int s)
{
    lepi += lep[s];
    //cout << lepi << " ";
    if(tren > t)
    {
        lepi -= lep[s];
        return;
    }
    if(lepi > maks)
        maks = lepi;
    for(i : graf[s])
    {
        tren += i.second;
        dfs(i.first);
        tren -= i.second;
    }
    lepi -= lep[s];
}

int main()
{
    int n, p;
    cin >> n >> t;
    for(int i = 1; i <= n; i++)
        cin >> lep[i];
    for(int i = 1; i <= n; i++)
    {
        cin >> pom[i];
        //grana(pom, {i, 0});
    }
    for(int i = 1; i <= n; i++)
    {
        cin >> p;
        grana(pom[i], {i, p});
    }
    for(int i = 1; i <= n; i++)
    {
        lepi = 0;
        tren = 0;
        dfs(i);
    }
    cout << maks;
    return 0;
}