n,k=map(int,input().split())
p=list(map(int,input().split()))
c=list(map(int,input().split()))
for i in range(n):
    p[i]-=1
ans=max(c)
for i in range(n):
    f=i
    r=0
    l=[]
    while True:
        f=p[f]
        l.append(c[f])
        r+=c[f]
        if f==i:
            break
    t=0
    for j in range(len(l)):
        t+=l[j]
        ret=t
        if r>0:
            e=(k-j-1)//len(l)
            ret+=r*e
        ans=max(ans,ret)
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 for i in range(n):
    p[i]-=1 i range(n) range n p[i]-=1 p[i] p i 1 ans=max(c) ans max(c) max c for i in range(n):
    f=i
    r=0
    l=[]
    while True:
        f=p[f]
        l.append(c[f])
        r+=c[f]
        if f==i:
            break
    t=0
    for j in range(len(l)):
        t+=l[j]
        ret=t
        if r>0:
            e=(k-j-1)//len(l)
            ret+=r*e
        ans=max(ans,ret) i range(n) range n f=i f i r=0 r 0 l=[] l [] while True:
        f=p[f]
        l.append(c[f])
        r+=c[f]
        if f==i:
            break
     True f=p[f] f p[f] p f l.append(c[f]) l.append l append c[f] c f r+=c[f] r c[f] c f if f==i:
            break
     f==i f i break t=0 t 0 for j in range(len(l)):
        t+=l[j]
        ret=t
        if r>0:
            e=(k-j-1)//len(l)
            ret+=r*e
        ans=max(ans,ret) j range(len(l)) range len(l) len l t+=l[j] t l[j] l j ret=t ret t if r>0:
            e=(k-j-1)//len(l)
            ret+=r*e
         r>0 r 0 e=(k-j-1)//len(l) e (k-j-1)//len(l) k-j-1 k-j k j 1 len(l) len l ret+=r*e ret r*e r e ans=max(ans,ret) ans max(ans,ret) max ans ret print(ans) print ans f=i i f l=[] [] l ans=max(c) max(c) ans f=p[f] p[f] f e=(k-j-1)//len(l) (k-j-1)//len(l) e t+=l[j] l[j] t r=0 0 r ret+=r*e r*e ret ret=t t ret p=list(map(int,input().split())) list(map(int,input().split())) p t=0 0 t c=list(map(int,input().split())) list(map(int,input().split())) c r+=c[f] c[f] r n,k=map(int,input().split()) map(int,input().split()) n ans=max(ans,ret) max(ans,ret) ans k=map(int,input().split()) map(int,input().split()) k
n,k=map(int,input().split())
p=list(map(int,input().split()))
c=list(map(int,input().split()))
for i in range(n):
    p[i]-=1
ans=max(c)
for i in range(n):
    f=i
    r=0
    l=[]
    while True:
        f=p[f]
        l.append(c[f])
        r+=c[f]
        if f==i:
            break
    t=0
    for j in range(len(l)):
        t+=l[j]
        ret=t
        if r>0:
            e=(k-j-1)//len(l)
            ret+=r*e
        ans=max(ans,ret)
print(ans)
