#pragma GCC optimize("Ofast")
  #pragma GCC target("avx,avx2,fma")
  #include <bits/stdc++.h>
  using namespace std;
  //---------------------------------//
  void __print(int x) {cerr << x;}
  void __print(long x) {cerr << x;}
  void __print(long long x) {cerr << x;}
  void __print(unsigned x) {cerr << x;}
  void __print(unsigned long x) {cerr << x;}
  void __print(unsigned long long x) {cerr << x;}
  void __print(float x) {cerr << x;}
  void __print(double x) {cerr << x;}
  void __print(long double x) {cerr << x;}
  void __print(char x) {cerr << '\'' << x << '\'';}
  void __print(const char *x) {cerr << '\"' << x << '\"';}
  void __print(const string &x) {cerr << '\"' << x << '\"';}
  void __print(bool x) {cerr << (x ? "true" : "false");}

  template<typename T, typename V>
  void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
  template<typename T>
  void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
  void _print() {cerr << "]\n";}
  template <typename T, typename... V>
  void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
  #ifndef ONLINE_JUDGE
  #define deb(x...) cerr << "[" << #x << "] = ["; _print(x)
  #else
  #define deb(x...)
  #endif
 //------------------------------//

  typedef long long int ll;
  typedef pair<int,int> pi;
  typedef pair<ll,ll> pll;
  typedef vector<int> vi;
  typedef vector<ll> vll;
  typedef vector<pi> vpi;
  typedef vector<pll> vpll;

  #define  ff           first
  #define  ss           second
  #define  pb           push_back
  #define  IOS          ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
  #define  all(x)       (x).begin(), (x).end()
  #define  ps(x,y)      fixed<<setprecision(y)<<x
  #define  rep(i,a,b)   for(ll i=a ; i<b ; ++i)

  const ll MOD = 1e9 + 7;
  const ll INF = 1e18;
  const ll maxn = 1e6 + 4;


  void solve(){
     ll n,k;
     cin >> n >> k;
     vll p(n),c(n);
     ll ans=INT_MIN;
     for(int i=0;i<n;i++)cin >> p[i];
     for(int i=0;i<n;i++)cin >> c[i];
     for(int i=0;i<n;i++){
       vll start_here;
       ll first;
       vector<bool> vis(n,0);        
       int pos = i;
       while(!vis[pos]){
         vis[pos]=1;
         if(start_here.size()==0){
            start_here.pb(0);
            first = c[pos];
         }
         else{
           start_here.pb(start_here.back()+c[pos]);
         }
         pos = p[pos]-1;
       }
       int sz = start_here.size();
       ll last = start_here[sz-1];
       ll tempans = -1e18;
       if(k >= sz){
         ll a=-1e18,b=-1e18;
         for(int j=1;j<sz;j++){
           if(j<=k%sz)b=max(b,start_here[j]);
           a = max(a,start_here[j]);
         }
         ll o = max((k/sz)*(last+first)+((b==-1e18)?0:b),max(0LL,k/sz-1)*(last+first)+(a==-1e18?0:a));
         tempans = max({tempans,o,a});
       }
       else{
         ll b = -1e18;
         for(int j=1;j<=k;j++){
           b = max(b,start_here[j]);
         }
         tempans = max(tempans,b);
       }
       ans = max(ans,tempans);
     }
     cout << ans;
  }

  int main(){
    IOS
    	solve();
    //cerr <<endl <<"[ Time : " << (float)clock() / CLOCKS_PER_SEC << " secs ]" << endl;
  }

// integer overflow

Measured memory_bytes: 3852