from math import inf
n,k=map(int,input().split())
arr=[0]+list(map(int,input().split()))
cost=[0]+list(map(int,input().split()))
ma=-inf
for i in range(1,n+1):
    se=set()
    cur=i
    pref=[0]
    f=0
    while(cur not in se and f<k):
        se.add(cur)
        cur=arr[cur]
        co = cost[cur]
        pref.append(pref[-1]+co)
        ma=max(ma,pref[-1])
        f+=1

    if pref[-1]>0 and k>=f:
        ans=pref[-1]*(k//f)
        for j in range(k%f+1):
            ma=max(ma,ans+pref[j])
        ma=max(ma,pref[-1]*(k//f-1)+max(pref))
print(ma)








 from math import inf n,k=map(int,input().split()) n map(int,input().split()) map int input().split() ().split () input split k arr=[0]+list(map(int,input().split())) arr [0]+list(map(int,input().split())) [0] 0 list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split cost=[0]+list(map(int,input().split())) cost [0]+list(map(int,input().split())) [0] 0 list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split ma=-inf ma -inf inf for i in range(1,n+1):
    se=set()
    cur=i
    pref=[0]
    f=0
    while(cur not in se and f<k):
        se.add(cur)
        cur=arr[cur]
        co = cost[cur]
        pref.append(pref[-1]+co)
        ma=max(ma,pref[-1])
        f+=1

    if pref[-1]>0 and k>=f:
        ans=pref[-1]*(k//f)
        for j in range(k%f+1):
            ma=max(ma,ans+pref[j])
        ma=max(ma,pref[-1]*(k//f-1)+max(pref)) i range(1,n+1) range 1 n+1 n 1 se=set() se set() set cur=i cur i pref=[0] pref [0] 0 f=0 f 0 while(cur not in se and f<k):
        se.add(cur)
        cur=arr[cur]
        co = cost[cur]
        pref.append(pref[-1]+co)
        ma=max(ma,pref[-1])
        f+=1

     cur not in se and f<k cur not in se cur se f<k f k se.add(cur) se.add se add cur cur=arr[cur] cur arr[cur] arr cur co = cost[cur] co cost[cur] cost cur pref.append(pref[-1]+co) pref.append pref append pref[-1]+co pref[-1] pref -1 co ma=max(ma,pref[-1]) ma max(ma,pref[-1]) max ma pref[-1] pref -1 f+=1 f 1 if pref[-1]>0 and k>=f:
        ans=pref[-1]*(k//f)
        for j in range(k%f+1):
            ma=max(ma,ans+pref[j])
        ma=max(ma,pref[-1]*(k//f-1)+max(pref)) pref[-1]>0 and k>=f pref[-1]>0 pref[-1] pref -1 0 k>=f k f ans=pref[-1]*(k//f) ans pref[-1]*(k//f) pref[-1] pref -1 k//f k f for j in range(k%f+1):
            ma=max(ma,ans+pref[j])
         j range(k%f+1) range k%f+1 k%f k f 1 ma=max(ma,ans+pref[j]) ma max(ma,ans+pref[j]) max ma ans+pref[j] ans pref[j] pref j ma=max(ma,pref[-1]*(k//f-1)+max(pref)) ma max(ma,pref[-1]*(k//f-1)+max(pref)) max ma pref[-1]*(k//f-1)+max(pref) pref[-1]*(k//f-1) pref[-1] pref -1 k//f-1 k//f k f 1 max(pref) max pref print(ma) print ma ma=max(ma,ans+pref[j]) max(ma,ans+pref[j]) ma arr=[0]+list(map(int,input().split())) [0]+list(map(int,input().split())) arr co = cost[cur] cost[cur] co ma=max(ma,pref[-1]*(k//f-1)+max(pref)) max(ma,pref[-1]*(k//f-1)+max(pref)) ma f+=1 1 f ma=-inf -inf ma ans=pref[-1]*(k//f) pref[-1]*(k//f) ans n,k=map(int,input().split()) map(int,input().split()) n pref=[0] [0] pref ma=max(ma,pref[-1]) max(ma,pref[-1]) ma f=0 0 f cur=i i cur k=map(int,input().split()) map(int,input().split()) k cost=[0]+list(map(int,input().split())) [0]+list(map(int,input().split())) cost se=set() set() se cur=arr[cur] arr[cur] cur
from math import inf
n,k=map(int,input().split())
arr=[0]+list(map(int,input().split()))
cost=[0]+list(map(int,input().split()))
ma=-inf
for i in range(1,n+1):
    se=set()
    cur=i
    pref=[0]
    f=0
    while(cur not in se and f<k):
        se.add(cur)
        cur=arr[cur]
        co = cost[cur]
        pref.append(pref[-1]+co)
        ma=max(ma,pref[-1])
        f+=1

    if pref[-1]>0 and k>=f:
        ans=pref[-1]*(k//f)
        for j in range(k%f+1):
            ma=max(ma,ans+pref[j])
        ma=max(ma,pref[-1]*(k//f-1)+max(pref))
print(ma)









