N,K=map(int,input().split())
P=list(map(int,input().split()))
P=list(map(lambda x:x-1,P)) 
C=list(map(int,input().split()))
ans=-float("inf")
for i in range(N):
   st=i
   tmp=0
   for j in range(K):
      st=P[st]
      tmp+=C[st]
      ans=max(ans,tmp)
      if i==st:
         break
   s,v=divmod(K,j+1)
   if s>1 and v==0:
      s-=1
      v=j+1
   tmp*=s
   ans=max(ans,tmp)
   for j in range(v):
      st=P[st]
      tmp+=C[st]
      ans=max(ans,tmp)
print(ans) N,K=map(int,input().split()) N map(int,input().split()) map int input().split() ().split () input split K P=list(map(int,input().split())) P list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split P=list(map(lambda x:x-1,P)) P list(map(lambda x:x-1,P)) list map(lambda x:x-1,P) map lambda x:x-1 x-1 x 1 x P C=list(map(int,input().split())) C list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split ans=-float("inf") ans -float("inf") float("inf") float "inf" for i in range(N):
   st=i
   tmp=0
   for j in range(K):
      st=P[st]
      tmp+=C[st]
      ans=max(ans,tmp)
      if i==st:
         break
   s,v=divmod(K,j+1)
   if s>1 and v==0:
      s-=1
      v=j+1
   tmp*=s
   ans=max(ans,tmp)
   for j in range(v):
      st=P[st]
      tmp+=C[st]
      ans=max(ans,tmp) i range(N) range N st=i st i tmp=0 tmp 0 for j in range(K):
      st=P[st]
      tmp+=C[st]
      ans=max(ans,tmp)
      if i==st:
         break
    j range(K) range K st=P[st] st P[st] P st tmp+=C[st] tmp C[st] C st ans=max(ans,tmp) ans max(ans,tmp) max ans tmp if i==st:
         break
    i==st i st break s,v=divmod(K,j+1) s divmod(K,j+1) divmod K j+1 j 1 v if s>1 and v==0:
      s-=1
      v=j+1
    s>1 and v==0 s>1 s 1 v==0 v 0 s-=1 s 1 v=j+1 v j+1 j 1 tmp*=s tmp s ans=max(ans,tmp) ans max(ans,tmp) max ans tmp for j in range(v):
      st=P[st]
      tmp+=C[st]
      ans=max(ans,tmp) j range(v) range v st=P[st] st P[st] P st tmp+=C[st] tmp C[st] C st ans=max(ans,tmp) ans max(ans,tmp) max ans tmp print(ans) print ans ans=max(ans,tmp) max(ans,tmp) ans s-=1 1 s st=i i st tmp+=C[st] C[st] tmp tmp+=C[st] C[st] tmp v=divmod(K,j+1) divmod(K,j+1) v v=j+1 j+1 v tmp*=s s tmp P=list(map(lambda x:x-1,P)) list(map(lambda x:x-1,P)) P st=P[st] P[st] st N,K=map(int,input().split()) map(int,input().split()) N P=list(map(int,input().split())) list(map(int,input().split())) P C=list(map(int,input().split())) list(map(int,input().split())) C K=map(int,input().split()) map(int,input().split()) K ans=max(ans,tmp) max(ans,tmp) ans ans=max(ans,tmp) max(ans,tmp) ans ans=-float("inf") -float("inf") ans st=P[st] P[st] st s,v=divmod(K,j+1) divmod(K,j+1) s tmp=0 0 tmp
N,K=map(int,input().split())
P=list(map(int,input().split()))
P=list(map(lambda x:x-1,P)) 
C=list(map(int,input().split()))
ans=-float("inf")
for i in range(N):
   st=i
   tmp=0
   for j in range(K):
      st=P[st]
      tmp+=C[st]
      ans=max(ans,tmp)
      if i==st:
         break
   s,v=divmod(K,j+1)
   if s>1 and v==0:
      s-=1
      v=j+1
   tmp*=s
   ans=max(ans,tmp)
   for j in range(v):
      st=P[st]
      tmp+=C[st]
      ans=max(ans,tmp)
print(ans)