n, k = map(int, input().split())
p = list(map(lambda x: int(x) - 1, input().split()))
c = list(map(int, input().split()))
    
visited = [False] * n
ans = max(c)

for i in range(n):
    if visited[i]:
        continue
    arr = []
    u = i
    while not visited[u]:
        arr.append(c[u])
        visited[u] = True
        u = p[u]
    s = sum(arr) * (k // len(arr))
    rem = k % len(arr)
    if k // len(arr) >= 1:
        s -= sum(arr)
        rem += len(arr)
        
    arr += arr + arr
    pref_sum = [0]
    for i in arr:
        pref_sum.append(pref_sum[-1] + i)
    # print(pref_sum, s, rem) 
            
    for f in range(len(arr) // 2):
        # ans = max(ans, s + sum(arr[f:f + rem])) 
        for g in range(f + 1, len(pref_sum)):
            if g - f <= k:
                ans = max(ans, pref_sum[g] - pref_sum[f])
            if g - f <= rem:
                ans = max(ans, s + pref_sum[g] - pref_sum[f])
print(ans)
     n, k = map(int, input().split()) n map(int, input().split()) map int input().split() ().split () input split k p = list(map(lambda x: int(x) - 1, input().split())) p list(map(lambda x: int(x) - 1, input().split())) list map(lambda x: int(x) - 1, input().split()) map lambda x: int(x) - 1 int(x) - 1 int(x) int x 1 x 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 visited = [False] * n visited [False] * n [False] False n ans = max(c) ans max(c) max c for i in range(n):
    if visited[i]:
        continue
    arr = []
    u = i
    while not visited[u]:
        arr.append(c[u])
        visited[u] = True
        u = p[u]
    s = sum(arr) * (k // len(arr))
    rem = k % len(arr)
    if k // len(arr) >= 1:
        s -= sum(arr)
        rem += len(arr)
        
    arr += arr + arr
    pref_sum = [0]
    for i in arr:
        pref_sum.append(pref_sum[-1] + i)
    # print(pref_sum, s, rem) 
            
    for f in range(len(arr) // 2):
        # ans = max(ans, s + sum(arr[f:f + rem])) 
        for g in range(f + 1, len(pref_sum)):
            if g - f <= k:
                ans = max(ans, pref_sum[g] - pref_sum[f])
            if g - f <= rem:
                ans = max(ans, s + pref_sum[g] - pref_sum[f]) i range(n) range n if visited[i]:
        continue
     visited[i] visited i continue arr = [] arr [] u = i u i while not visited[u]:
        arr.append(c[u])
        visited[u] = True
        u = p[u]
     not visited[u] visited[u] visited u arr.append(c[u]) arr.append arr append c[u] c u visited[u] = True visited[u] visited u True u = p[u] u p[u] p u s = sum(arr) * (k // len(arr)) s sum(arr) * (k // len(arr)) sum(arr) sum arr k // len(arr) k len(arr) len arr rem = k % len(arr) rem k % len(arr) k len(arr) len arr if k // len(arr) >= 1:
        s -= sum(arr)
        rem += len(arr)
        
     k // len(arr) >= 1 k // len(arr) k len(arr) len arr 1 s -= sum(arr) s sum(arr) sum arr rem += len(arr) rem len(arr) len arr arr += arr + arr arr arr + arr arr arr pref_sum = [0] pref_sum [0] 0 for i in arr:
        pref_sum.append(pref_sum[-1] + i)
    # print(pref_sum, s, rem) 
            
     i arr pref_sum.append(pref_sum[-1] + i) pref_sum.append pref_sum append pref_sum[-1] + i pref_sum[-1] pref_sum -1 i for f in range(len(arr) // 2):
        # ans = max(ans, s + sum(arr[f:f + rem])) 
        for g in range(f + 1, len(pref_sum)):
            if g - f <= k:
                ans = max(ans, pref_sum[g] - pref_sum[f])
            if g - f <= rem:
                ans = max(ans, s + pref_sum[g] - pref_sum[f]) f range(len(arr) // 2) range len(arr) // 2 len(arr) len arr 2 for g in range(f + 1, len(pref_sum)):
            if g - f <= k:
                ans = max(ans, pref_sum[g] - pref_sum[f])
            if g - f <= rem:
                ans = max(ans, s + pref_sum[g] - pref_sum[f]) g range(f + 1, len(pref_sum)) range f + 1 f 1 len(pref_sum) len pref_sum if g - f <= k:
                ans = max(ans, pref_sum[g] - pref_sum[f])
             g - f <= k g - f g f k ans = max(ans, pref_sum[g] - pref_sum[f]) ans max(ans, pref_sum[g] - pref_sum[f]) max ans pref_sum[g] - pref_sum[f] pref_sum[g] pref_sum g pref_sum[f] pref_sum f if g - f <= rem:
                ans = max(ans, s + pref_sum[g] - pref_sum[f]) g - f <= rem g - f g f rem ans = max(ans, s + pref_sum[g] - pref_sum[f]) ans max(ans, s + pref_sum[g] - pref_sum[f]) max ans s + pref_sum[g] - pref_sum[f] s + pref_sum[g] s pref_sum[g] pref_sum g pref_sum[f] pref_sum f print(ans) print ans ans = max(ans, pref_sum[g] - pref_sum[f]) max(ans, pref_sum[g] - pref_sum[f]) ans arr = [] [] arr c = list(map(int, input().split())) list(map(int, input().split())) c rem += len(arr) len(arr) rem arr += arr + arr arr + arr arr s = sum(arr) * (k // len(arr)) sum(arr) * (k // len(arr)) s n, k = map(int, input().split()) map(int, input().split()) n rem = k % len(arr) k % len(arr) rem ans = max(ans, s + pref_sum[g] - pref_sum[f]) max(ans, s + pref_sum[g] - pref_sum[f]) ans p = list(map(lambda x: int(x) - 1, input().split())) list(map(lambda x: int(x) - 1, input().split())) p s -= sum(arr) sum(arr) s pref_sum = [0] [0] pref_sum ans = max(c) max(c) ans visited = [False] * n [False] * n visited u = p[u] p[u] u k = map(int, input().split()) map(int, input().split()) k u = i i u
n, k = map(int, input().split())
p = list(map(lambda x: int(x) - 1, input().split()))
c = list(map(int, input().split()))
    
visited = [False] * n
ans = max(c)

for i in range(n):
    if visited[i]:
        continue
    arr = []
    u = i
    while not visited[u]:
        arr.append(c[u])
        visited[u] = True
        u = p[u]
    s = sum(arr) * (k // len(arr))
    rem = k % len(arr)
    if k // len(arr) >= 1:
        s -= sum(arr)
        rem += len(arr)
        
    arr += arr + arr
    pref_sum = [0]
    for i in arr:
        pref_sum.append(pref_sum[-1] + i)
    # print(pref_sum, s, rem) 
            
    for f in range(len(arr) // 2):
        # ans = max(ans, s + sum(arr[f:f + rem])) 
        for g in range(f + 1, len(pref_sum)):
            if g - f <= k:
                ans = max(ans, pref_sum[g] - pref_sum[f])
            if g - f <= rem:
                ans = max(ans, s + pref_sum[g] - pref_sum[f])
print(ans)
    
