def msg(s)
  # $stderr.puts s.to_s
end

N, K = $stdin.gets.split.map {|i| i.to_i }
P = $stdin.gets.split.map {|i| i.to_i }
Plen = P.length
C = $stdin.gets.split.map {|i| i.to_i }
#CP = C.zip(P).sort {|a, b| a[1] <=> b[1] }
#msg CP
tr_max = [K, Plen].min
smaxmax = C[0]
rt_sum = 0
1.upto(Plen) do |start|
  rt_sum += C[start - 1]
  n = P[start - 1]
  s = smax = C[n - 1]
  label = "[#{start}->#{n}]"
  msg "#{label} #{s} / #{smax}"
  1.upto(tr_max - 1) do |cnt|
    n = P[n - 1]
    s += C[n - 1]
    if smax < s
      smax = s
    end
    msg "#{label} [#{cnt}:#{n}] #{s} / #{smax}"
  end
  if smaxmax < smax
    smaxmax = smax
  end
end
if rt_sum > 0
  puts rt_sum * (K / Plen) + smaxmax
else
  puts smaxmax
end
