n,k=gets.split.map(&:to_i)
q=gets.split.map(&:to_i)
c=gets.split.map(&:to_i)
v=[0]*n
a=-1/0.0
n.times do |i|
  if v[i]==0
    s=[]
    j=i
    while v[j]==0
      v[j]=1
      s << c[j]
      j=q[j]-1
    end
    z=s.sum
    ss=s.dup
    sz=s.size
    if z>=0
      [sz,k].min.times do |j|
        sss=[]
        ss.each.with_index do |sssi,si|
          a=sssi+z*((k-j-1)/sz) if a<sssi+z*((k-j-1)/sz)
          sss << sssi+s[(si+j+1)%sz]
        end
        ss=sss.dup
      end
    else
      [sz,k].min.times do |j|
        sss=[]
        ss.each.with_index do |sssi,si|
          a=sssi if a<sssi
          sss << sssi+s[(si+j+1)%sz]
        end
        ss=sss.dup
      end
    end
    [sz,k].min.times do |j|
      sss=[]
      ss.each.with_index do |sssi,si|
        if z>=0
          a=sssi+z*((k-j-1)/sz) if a<sssi+z*((k-j-1)/sz)
        else
          a=sssi if a<sssi
        end
        sss << sssi+s[(si+j+1)%sz]
      end
      ss=sss.dup
    end
  end
end
puts a
