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=-float('inf')
for i in range(n):
    snp=P[i]
    r=C[snp]
    L=[r]
    c=0
    np=P[snp]
    while True:
        if c==k-1:
            ANS=max(max(L),ANS)
            break
        if np==snp:
            y=k%(c+1)
            m=k//(c+1)
            if y==0:
                ANS=max(max(L),max(L)+(m-1)*L[-1],ANS)
                break
            else:
                #print(m,y)
                #print(L)
                ANS=max(max(L),max(max(L[:y]),0)+m*L[-1],ANS)
                break
        r+=C[np]
        L.append(r)
        np=P[np]
        c+=1
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=-float('inf') ANS -float('inf') float('inf') float 'inf' for i in range(n):
    snp=P[i]
    r=C[snp]
    L=[r]
    c=0
    np=P[snp]
    while True:
        if c==k-1:
            ANS=max(max(L),ANS)
            break
        if np==snp:
            y=k%(c+1)
            m=k//(c+1)
            if y==0:
                ANS=max(max(L),max(L)+(m-1)*L[-1],ANS)
                break
            else:
                #print(m,y)
                #print(L)
                ANS=max(max(L),max(max(L[:y]),0)+m*L[-1],ANS)
                break
        r+=C[np]
        L.append(r)
        np=P[np]
        c+=1 i range(n) range n snp=P[i] snp P[i] P i r=C[snp] r C[snp] C snp L=[r] L [r] r c=0 c 0 np=P[snp] np P[snp] P snp while True:
        if c==k-1:
            ANS=max(max(L),ANS)
            break
        if np==snp:
            y=k%(c+1)
            m=k//(c+1)
            if y==0:
                ANS=max(max(L),max(L)+(m-1)*L[-1],ANS)
                break
            else:
                #print(m,y)
                #print(L)
                ANS=max(max(L),max(max(L[:y]),0)+m*L[-1],ANS)
                break
        r+=C[np]
        L.append(r)
        np=P[np]
        c+=1 True if c==k-1:
            ANS=max(max(L),ANS)
            break
         c==k-1 c k-1 k 1 ANS=max(max(L),ANS) ANS max(max(L),ANS) max max(L) max L ANS break if np==snp:
            y=k%(c+1)
            m=k//(c+1)
            if y==0:
                ANS=max(max(L),max(L)+(m-1)*L[-1],ANS)
                break
            else:
                #print(m,y)
                #print(L)
                ANS=max(max(L),max(max(L[:y]),0)+m*L[-1],ANS)
                break
         np==snp np snp y=k%(c+1) y k%(c+1) k c+1 c 1 m=k//(c+1) m k//(c+1) k c+1 c 1 if y==0:
                ANS=max(max(L),max(L)+(m-1)*L[-1],ANS)
                break
            else:
                #print(m,y)
                #print(L)
                ANS=max(max(L),max(max(L[:y]),0)+m*L[-1],ANS)
                break
         y==0 y 0 ANS=max(max(L),max(L)+(m-1)*L[-1],ANS) ANS max(max(L),max(L)+(m-1)*L[-1],ANS) max max(L) max L max(L)+(m-1)*L[-1] max(L) max L (m-1)*L[-1] m-1 m 1 L[-1] L -1 ANS break ANS=max(max(L),max(max(L[:y]),0)+m*L[-1],ANS) ANS max(max(L),max(max(L[:y]),0)+m*L[-1],ANS) max max(L) max L max(max(L[:y]),0)+m*L[-1] max(max(L[:y]),0) max max(L[:y]) max L[:y] L :y y 0 m*L[-1] m L[-1] L -1 ANS break r+=C[np] r C[np] C np L.append(r) L.append L append r np=P[np] np P[np] P np c+=1 c 1 print(ANS) print ANS m=k//(c+1) k//(c+1) m ANS=max(max(L),max(L)+(m-1)*L[-1],ANS) max(max(L),max(L)+(m-1)*L[-1],ANS) ANS np=P[snp] P[snp] np y=k%(c+1) k%(c+1) y c+=1 1 c n,k=map(int,input().split()) map(int,input().split()) n ANS=-float('inf') -float('inf') ANS L=[r] [r] L r=C[snp] C[snp] r ANS=max(max(L),max(max(L[:y]),0)+m*L[-1],ANS) max(max(L),max(max(L[:y]),0)+m*L[-1],ANS) ANS ANS=max(max(L),ANS) max(max(L),ANS) ANS k=map(int,input().split()) map(int,input().split()) k C=list(map(int,input().split())) list(map(int,input().split())) C r+=C[np] C[np] r np=P[np] P[np] np P=list(map(int,input().split())) list(map(int,input().split())) P c=0 0 c snp=P[i] P[i] snp
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=-float('inf')
for i in range(n):
    snp=P[i]
    r=C[snp]
    L=[r]
    c=0
    np=P[snp]
    while True:
        if c==k-1:
            ANS=max(max(L),ANS)
            break
        if np==snp:
            y=k%(c+1)
            m=k//(c+1)
            if y==0:
                ANS=max(max(L),max(L)+(m-1)*L[-1],ANS)
                break
            else:
                #print(m,y)
                #print(L)
                ANS=max(max(L),max(max(L[:y]),0)+m*L[-1],ANS)
                break
        r+=C[np]
        L.append(r)
        np=P[np]
        c+=1
print(ANS)