#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF=1e18;
int n,p[5003],len;
int K;
ll C[5002],ans=-INF,ret[5002];
void dfs(int x,int w){
    if(x==w)return;
    ++len;
    ret[len]=ret[len-1]+C[p[x]];
    dfs(p[x],w);
}
int main(){
    cin>>n>>K;
    for(int i=1;i<=n;i++)cin>>p[i];
    for(int i=1;i<=n;i++)cin>>C[i],ans=max(ans,C[i]);
    for(int i=1;i<=n;i++){
        ret[1]=C[p[i]];
        len=1;
        dfs(p[i],i);
        for(int j=1;j<=min(len,K);j++)ans=max(ans,ret[j]);
        if(K>len&&ret[len]>0){
            ll pr=K/len,ps=K%len,res=pr*ret[len];
            for(int j=0;j<=ps;j++)ans=max(ans,res+ret[j]);
            for(int j=0;j<=len;j++)ans=max(ans,res-ret[len]+ret[j]);
        }
    }
    cout<<ans;
}
