#include <bits/stdc++.h>
#define maxN 100005

using namespace std;

long long dp[1005][1005],n,t,i,j,k,x[maxN],d[maxN],a[maxN],ans,dis,s,res;
vector < pair<int,int> > adj[maxN];

int main()
{
    cin>>n>>t;
    for(i=0;i<n;i++){
        cin>>a[i];
        s+=a[i];
    }
    for(i=0;i<n;i++){
        cin>>x[i];
        x[i]--;
    }
    for(i=0;i<n;i++){
        cin>>d[i];
        dis+=d[i];
    }
    for(i=0;i<n;i++){
        adj[x[i]].push_back({i,d[i]});
    }
    if(n<=1000 && t<=1000){
    for(i=0;i<=t;i++){
        for(j=0;j<n;j++){
            dp[i][j]=a[j];
            for(k=0;k<adj[j].size();k++){
                if(i>=adj[j][k].second){
                    dp[i][j]=max(dp[i][j],a[j]+dp[i-adj[j][k].second][adj[j][k].first]);
                }
            }
            ans=max(ans,dp[i][j]);
        }
    }
    }
    else{
        res=(t/dis)*s;
        t=(t+dis)%dis;
        ans=0;
        for(i=0;i<n;i++){
        s=a[i];
        dis=0;
        j=i;
        while(adj[j][0].second+dis<=t){
            dis+=adj[j][0].second;
            j=adj[j][0].first;
            s+=a[j];
        }
        ans=max(ans,s);
        }
        ans+=res;
    }
    cout<<ans<<endl;
    return 0;
}