#include<bits/stdc++.h>
#define maxn 1005
using namespace std;

int n;
long long t;
int p[maxn];
long long a[maxn];
long long d[maxn];

stack<int>ms;
int bio[maxn];
int main()
{
     ios_base::sync_with_stdio(false);
     cin.tie(nullptr);
     cout.tie(nullptr);

     cin>>n>>t;
     for(int i=1;i<=n;i++)cin>>a[i];
     for(int i=1;i<=n;i++)cin>>p[i];
     for(int i=1;i<=n;i++)cin>>d[i];

     for(int i=1;i<=n;i++)
     {
        if(out[i]==0)
        {
            ms.push(i);
        }
     }
     while(!ms.empty())
     {
        int v=ms.top();ms.pop();
        for(auto u:in[v])
        {
            out[u]--;
            if(out[u]==0)ms.push(u);
        }
     }
    
     long long sol=-1;
     for(int i=1;i<=n;i++)
     {
         for(int j=1;j<=n;j++)bio[j]=0LL;
         
         int v=i;
         long long lep=0LL;
         long long tme=0LL;
         while(true)
         {
             bio[v]++;
             
             /*if(tme!=0LL && out[v]!=0)
             {
                 long long brr=t/tme;
                 tme*=brr;
                 lep*=brr;
             }*/
             
             
             lep+=a[v];
             
             if(d[v]+tme<=t)
             {
                 v=p[v];
                 tme+=d[v];
             }
             else break;
         }
         if(lep>sol)sol=lep;
     }
     

     cout<<sol<<endl;
     return 0;
}