#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];
vector<int>in[maxn];

stack<int>ms;
int out[maxn];
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];
         out[p[i]]++;
     }
     for(int i=1;i<=n;i++)
     {
         cin>>d[i];
         in[i].push_back(p[i]);
     }

     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=a[v];
         long long tme=0LL;
         bio[v]++;
         int cv=-1;
         while(true)
         {
             if(bio[v]>1)
             {
                 cv=v;
             }
             if(d[v]+tme<=t)
             {
                bio[v]++;
                tme+=d[v];
                v=p[v];
                lep+=a[v];
             }
             else break;
         }
         if(cv!=-1)
         {
             v=i;
             long long dlep=a[v];
             long long dtme=0LL;
             while(true)
             {
                dtme+=d[v];
                v=p[v];
                if(v==cv)break;
                dlep+=a[v];
             }
             if(i==cv)dlep-=a[cv];

             v=cv;
             long long dlep2=a[v];
             long long dtme2=0LL;
             while(true)
             {
                 dtme2+=d[v];
                 v=p[v];
                 if(v==cv)break;
                 dlep2+=a[v];
             }

             v=cv;
             long long brr=(t-dtme)/dtme2;
             lep=dlep+dlep2*brr+a[v];
             tme=dtme+dtme2*brr;

             while(true)
             {
                if(d[v]+tme<=t)
                {
                    tme+=d[v];
                    v=p[v];
                    lep+=a[v];
                }
                else break;
             }
         }
         if(lep>sol)sol=lep;
     }


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