N,K = map(int,input().split())
P = list(map(int,input().split()))
for i in range(N):
    P[i] -= 1
C = list(map(int,input().split()))
ans = max(C)
for i in range(N):
    p = i
    d = []
    while True:
        p = P[p]
        d.append(C[p])
        if p == i:
            break
    #print(d,sum(d))
    val = 0
    for j in range(min(K,len(d))):
        val += d[j]
        ans = max(ans,val)
        #print(val,i,j)



    if K > len(d):
        k = K % len(d)
        val = (K//len(d)) * sum(d)
        ans = max(ans,val)
        for j in range(k):
            val += d[j]
            ans = max(ans,val)

        val = (K//len(d)-1) * sum(d)
        for j in range(len(d)):
            val += d[j]
            ans = max(ans,val)

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 for i in range(N):
    P[i] -= 1 i range(N) range N P[i] -= 1 P[i] P i 1 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 = max(C) ans max(C) max C for i in range(N):
    p = i
    d = []
    while True:
        p = P[p]
        d.append(C[p])
        if p == i:
            break
    #print(d,sum(d))
    val = 0
    for j in range(min(K,len(d))):
        val += d[j]
        ans = max(ans,val)
        #print(val,i,j)



    if K > len(d):
        k = K % len(d)
        val = (K//len(d)) * sum(d)
        ans = max(ans,val)
        for j in range(k):
            val += d[j]
            ans = max(ans,val)

        val = (K//len(d)-1) * sum(d)
        for j in range(len(d)):
            val += d[j]
            ans = max(ans,val) i range(N) range N p = i p i d = [] d [] while True:
        p = P[p]
        d.append(C[p])
        if p == i:
            break
    #print(d,sum(d))
     True p = P[p] p P[p] P p d.append(C[p]) d.append d append C[p] C p if p == i:
            break
    #print(d,sum(d))
     p == i p i break val = 0 val 0 for j in range(min(K,len(d))):
        val += d[j]
        ans = max(ans,val)
        #print(val,i,j)



     j range(min(K,len(d))) range min(K,len(d)) min K len(d) len d val += d[j] val d[j] d j ans = max(ans,val) ans max(ans,val) max ans val if K > len(d):
        k = K % len(d)
        val = (K//len(d)) * sum(d)
        ans = max(ans,val)
        for j in range(k):
            val += d[j]
            ans = max(ans,val)

        val = (K//len(d)-1) * sum(d)
        for j in range(len(d)):
            val += d[j]
            ans = max(ans,val) K > len(d) K len(d) len d k = K % len(d) k K % len(d) K len(d) len d val = (K//len(d)) * sum(d) val (K//len(d)) * sum(d) K//len(d) K len(d) len d sum(d) sum d ans = max(ans,val) ans max(ans,val) max ans val for j in range(k):
            val += d[j]
            ans = max(ans,val)

         j range(k) range k val += d[j] val d[j] d j ans = max(ans,val) ans max(ans,val) max ans val val = (K//len(d)-1) * sum(d) val (K//len(d)-1) * sum(d) K//len(d)-1 K//len(d) K len(d) len d 1 sum(d) sum d for j in range(len(d)):
            val += d[j]
            ans = max(ans,val) j range(len(d)) range len(d) len d val += d[j] val d[j] d j ans = max(ans,val) ans max(ans,val) max ans val print(ans) print ans p = P[p] P[p] p val = (K//len(d)) * sum(d) (K//len(d)) * sum(d) val P = list(map(int,input().split())) list(map(int,input().split())) P ans = max(C) max(C) ans val = 0 0 val ans = max(ans,val) max(ans,val) ans N,K = map(int,input().split()) map(int,input().split()) N val += d[j] d[j] val ans = max(ans,val) max(ans,val) ans K = map(int,input().split()) map(int,input().split()) K d = [] [] d p = i i p k = K % len(d) K % len(d) k val += d[j] d[j] val ans = max(ans,val) max(ans,val) ans C = list(map(int,input().split())) list(map(int,input().split())) C val += d[j] d[j] val ans = max(ans,val) max(ans,val) ans val = (K//len(d)-1) * sum(d) (K//len(d)-1) * sum(d) val
N,K = map(int,input().split())
P = list(map(int,input().split()))
for i in range(N):
    P[i] -= 1
C = list(map(int,input().split()))
ans = max(C)
for i in range(N):
    p = i
    d = []
    while True:
        p = P[p]
        d.append(C[p])
        if p == i:
            break
    #print(d,sum(d))
    val = 0
    for j in range(min(K,len(d))):
        val += d[j]
        ans = max(ans,val)
        #print(val,i,j)



    if K > len(d):
        k = K % len(d)
        val = (K//len(d)) * sum(d)
        ans = max(ans,val)
        for j in range(k):
            val += d[j]
            ans = max(ans,val)

        val = (K//len(d)-1) * sum(d)
        for j in range(len(d)):
            val += d[j]
            ans = max(ans,val)

print(ans)
