#include <bits/stdc++.h>

using namespace std;

pair<long long,long long> niz[500005];
vector<long long> g[500005];

long long dfs(long long n, long long t, long long s, long long tr)
{
    t+=niz[n].second;
    if(t > tr)
    {
        return s;
    }
    s+=niz[n].first;
    for(auto x : g[n])
       return dfs(x, t, s, tr);

}


int main ()
{
    long long n, t;
    cin >> n >> t;
    for(long long i=0;i<n;i++)
    {
        cin >> niz[i].first;
    }
    for(long long i=0;i<n;i++)
    {
        long long pp;
        cin >> pp;
        g[pp-1].push_back(i);
    }
    for(long long i=0;i<n;i++)
    {
        cin >> niz[i].second;
    }
    long long maxi = 0;
    for(long long i=0;i<n;i++)
    {
        long long p = dfs(i, (long long)(-niz[i].second), 0, t);
        if(p > maxi)
            maxi = p;
    }
    cout << maxi;
}