#include <bits/stdc++.h>

using namespace std;

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

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