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

using namespace std;

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

int main()
{
    cin>>n>>t;
    for(i=0;i<n;i++){
        cin>>a[i];
    }
    for(i=0;i<n;i++){
        cin>>x[i];
        x[i]--;
    }
    for(i=0;i<n;i++){
        cin>>d[i];
    }
    for(i=0;i<n;i++){
        adj[x[i]].push_back({i,d[i]});
    }
    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]);
        }
    }
    cout<<ans<<endl;
    return 0;
}