#include<bits/stdc++.h>

using namespace std;

int n;
long long t;
vector<int> ocene;
vector<int> tezina;
vector<int> koji;
vector<long long> pom;
long long sumtez;
long long sumlepota;
vector<bool> posecen;
long long preostalo;
long long maxlepota;
long long trenlepota;
vector<long long> jbg;

void dfs(int i)
{
    if(posecen[i])
        return;
    pom.push_back(tezina[i]);
    jbg.push_back((long long)ocene[i]);
    posecen[i]=true;
    dfs(koji[i]-1);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin >> n >> t;
    ocene.resize(n);
    tezina.resize(n);
    koji.resize(n);
    for(int i=0;i<n;i++)
        cin >> ocene[i];
    for(int i=0;i<n;i++)
        cin >> koji[i];
    for(int i=0;i<n;i++)
        cin >> tezina[i];
    posecen.resize(n);
    dfs(0);

    for(int i=0;i<2*n;i++)
    {
        pom.push_back(pom[i]);
        jbg.push_back(jbg[i]);
    }
    for(int i=1;i<pom.size();i++)
        pom[i]=pom[i]+pom[i-1],jbg[i]=jbg[i]+jbg[i-1];
    for(int i=0;i<n;i++)
    {
        sumtez=pom[i+n]-pom[i];
        preostalo=t%sumtez;
        trenlepota=(t/sumtez)*(jbg[i+n]-jbg[i]);
        trenlepota+=jbg[lower_bound(pom.begin(),pom.end(),pom[i]+preostalo)-pom.begin()+1]-jbg[i];
        maxlepota=max(trenlepota,maxlepota);
    }
    cout << maxlepota << endl;
}