n,k=map(int,input().split())
p=list(map(int,input().split()))
c=list(map(int,input().split()))
ans=[]
for i in range(n):
  ct=0
  score=0
  s=[]
  pos=i
  while ct<k:
    ct+=1
    pos=p[pos]-1
    score+=c[pos]
    s.append(score)
    if pos==i:
      break
  if s[-1]<0:
    ans.append(max(s))
  elif pos!=i:
    ans.append(max(s))
  elif k%len(s)==0:
    ans.append(s[-1]*(k//len(s)-1)+max(s))
  else:
    ans.append(max(s[-1]*(k//len(s)-1)+max(s),s[-1]*(k//len(s))+max(s[0:k%len(s)])))
print(max(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=[] ans [] for i in range(n):
  ct=0
  score=0
  s=[]
  pos=i
  while ct<k:
    ct+=1
    pos=p[pos]-1
    score+=c[pos]
    s.append(score)
    if pos==i:
      break
  if s[-1]<0:
    ans.append(max(s))
  elif pos!=i:
    ans.append(max(s))
  elif k%len(s)==0:
    ans.append(s[-1]*(k//len(s)-1)+max(s))
  else:
    ans.append(max(s[-1]*(k//len(s)-1)+max(s),s[-1]*(k//len(s))+max(s[0:k%len(s)]))) i range(n) range n ct=0 ct 0 score=0 score 0 s=[] s [] pos=i pos i while ct<k:
    ct+=1
    pos=p[pos]-1
    score+=c[pos]
    s.append(score)
    if pos==i:
      break
   ct<k ct k ct+=1 ct 1 pos=p[pos]-1 pos p[pos]-1 p[pos] p pos 1 score+=c[pos] score c[pos] c pos s.append(score) s.append s append score if pos==i:
      break
   pos==i pos i break if s[-1]<0:
    ans.append(max(s))
  elif pos!=i:
    ans.append(max(s))
  elif k%len(s)==0:
    ans.append(s[-1]*(k//len(s)-1)+max(s))
  else:
    ans.append(max(s[-1]*(k//len(s)-1)+max(s),s[-1]*(k//len(s))+max(s[0:k%len(s)]))) s[-1]<0 s[-1] s -1 0 ans.append(max(s)) ans.append ans append max(s) max s elif pos!=i:
    ans.append(max(s))
   pos!=i pos i ans.append(max(s)) ans.append ans append max(s) max s elif k%len(s)==0:
    ans.append(s[-1]*(k//len(s)-1)+max(s))
   k%len(s)==0 k%len(s) k len(s) len s 0 ans.append(s[-1]*(k//len(s)-1)+max(s)) ans.append ans append s[-1]*(k//len(s)-1)+max(s) s[-1]*(k//len(s)-1) s[-1] s -1 k//len(s)-1 k//len(s) k len(s) len s 1 max(s) max s ans.append(max(s[-1]*(k//len(s)-1)+max(s),s[-1]*(k//len(s))+max(s[0:k%len(s)]))) ans.append ans append max(s[-1]*(k//len(s)-1)+max(s),s[-1]*(k//len(s))+max(s[0:k%len(s)])) max s[-1]*(k//len(s)-1)+max(s) s[-1]*(k//len(s)-1) s[-1] s -1 k//len(s)-1 k//len(s) k len(s) len s 1 max(s) max s s[-1]*(k//len(s))+max(s[0:k%len(s)]) s[-1]*(k//len(s)) s[-1] s -1 k//len(s) k len(s) len s max(s[0:k%len(s)]) max s[0:k%len(s)] s 0:k%len(s) 0 k%len(s) k len(s) len s print(max(ans)) print max(ans) max ans p=list(map(int,input().split())) list(map(int,input().split())) p score=0 0 score ct+=1 1 ct c=list(map(int,input().split())) list(map(int,input().split())) c score+=c[pos] c[pos] score s=[] [] s ct=0 0 ct pos=i i pos n,k=map(int,input().split()) map(int,input().split()) n ans=[] [] ans pos=p[pos]-1 p[pos]-1 pos 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()))
ans=[]
for i in range(n):
  ct=0
  score=0
  s=[]
  pos=i
  while ct<k:
    ct+=1
    pos=p[pos]-1
    score+=c[pos]
    s.append(score)
    if pos==i:
      break
  if s[-1]<0:
    ans.append(max(s))
  elif pos!=i:
    ans.append(max(s))
  elif k%len(s)==0:
    ans.append(s[-1]*(k//len(s)-1)+max(s))
  else:
    ans.append(max(s[-1]*(k//len(s)-1)+max(s),s[-1]*(k//len(s))+max(s[0:k%len(s)])))
print(max(ans))