#import math
#import numpy as np

N, K = map(int,input().split())
P = list(map(int,input().split()))
C = list(map(int,input().split()))
#for i in range(len(P)): #Pの中身は次の動く先の位置なのでデクリメントする
#    P[i] -= 1

ans = -99999999999999

for i in range(N):
    x = i
    total = 0
    s=[]
    while(1):#サイクルごとに長さをまず求める，
        x = P[x]-1
        s.append(C[x])
        total += C[x]
        if x == i:
            break
    l = len(s)#サイクルの長さ
    t = 0
    for i in range(l):#サイクルの中でどこで終わるのがベストか探す
        t += s[i]
        if i+1> K:#Kがサイクルより短かったらそこで終わる
            break
        now = t
        if total > 0:
            cycle = int((K-i-1)/l)
            now += total*cycle

        ans = max(ans, now)

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 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 = -99999999999999 ans -99999999999999 for i in range(N):
    x = i
    total = 0
    s=[]
    while(1):#サイクルごとに長さをまず求める，
        x = P[x]-1
        s.append(C[x])
        total += C[x]
        if x == i:
            break
    l = len(s)#サイクルの長さ
    t = 0
    for i in range(l):#サイクルの中でどこで終わるのがベストか探す
        t += s[i]
        if i+1> K:#Kがサイクルより短かったらそこで終わる
            break
        now = t
        if total > 0:
            cycle = int((K-i-1)/l)
            now += total*cycle

        ans = max(ans, now) i range(N) range N x = i x i total = 0 total 0 s=[] s [] while(1):#サイクルごとに長さをまず求める，
        x = P[x]-1
        s.append(C[x])
        total += C[x]
        if x == i:
            break
     1 x = P[x]-1 x P[x]-1 P[x] P x 1 s.append(C[x]) s.append s append C[x] C x total += C[x] total C[x] C x if x == i:
            break
     x == i x i break l = len(s) l len(s) len s t = 0 t 0 for i in range(l):#サイクルの中でどこで終わるのがベストか探す
        t += s[i]
        if i+1> K:#Kがサイクルより短かったらそこで終わる
            break
        now = t
        if total > 0:
            cycle = int((K-i-1)/l)
            now += total*cycle

        ans = max(ans, now) i range(l) range l t += s[i] t s[i] s i if i+1> K:#Kがサイクルより短かったらそこで終わる
            break
         i+1> K i+1 i 1 K break now = t now t if total > 0:
            cycle = int((K-i-1)/l)
            now += total*cycle

         total > 0 total 0 cycle = int((K-i-1)/l) cycle int((K-i-1)/l) int (K-i-1)/l K-i-1 K-i K i 1 l now += total*cycle now total*cycle total cycle ans = max(ans, now) ans max(ans, now) max ans now print(ans) print ans t += s[i] s[i] t now = t t now ans = max(ans, now) max(ans, now) ans total += C[x] C[x] total s=[] [] s l = len(s) len(s) l now += total*cycle total*cycle now total = 0 0 total t = 0 0 t K = map(int,input().split()) map(int,input().split()) K ans = -99999999999999 -99999999999999 ans x = P[x]-1 P[x]-1 x P = list(map(int,input().split())) list(map(int,input().split())) P x = i i x cycle = int((K-i-1)/l) int((K-i-1)/l) cycle C = list(map(int,input().split())) list(map(int,input().split())) C N, K = map(int,input().split()) map(int,input().split()) N
#import math
#import numpy as np

N, K = map(int,input().split())
P = list(map(int,input().split()))
C = list(map(int,input().split()))
#for i in range(len(P)): #Pの中身は次の動く先の位置なのでデクリメントする
#    P[i] -= 1

ans = -99999999999999

for i in range(N):
    x = i
    total = 0
    s=[]
    while(1):#サイクルごとに長さをまず求める，
        x = P[x]-1
        s.append(C[x])
        total += C[x]
        if x == i:
            break
    l = len(s)#サイクルの長さ
    t = 0
    for i in range(l):#サイクルの中でどこで終わるのがベストか探す
        t += s[i]
        if i+1> K:#Kがサイクルより短かったらそこで終わる
            break
        now = t
        if total > 0:
            cycle = int((K-i-1)/l)
            now += total*cycle

        ans = max(ans, now)

print(ans)
