n,k=gets.split.map &:to_i
ps=gets.split.map &:to_i
cs=gets.split.map &:to_i
fs=[false]*n
rs=[]
ss=[]
1.upto(n){|i|
  next if fs[i-1]
  fs[i-1]=true
  rs.push(r=[])
  r.push(s=cs[i-1])
  j=ps[i-1]
  while j!=i
    fs[j-1]=true
    r.push(c=cs[j-1])
    s+=c
    j=ps[j-1]
  end
  ss.push(s)
}
puts rs.zip(ss).map{|r,s|
  m=r.size
  Enumerator.new{|y|
    if s<=0||k<=m
      k=[k,m].min
      m.times{|i|
        x=0
        k.times{|j|
          x+=r[i+j<m ? i+j : i+j-m]
          y<<x
        }
      }
    else
      q,d=(k-1).divmod(m)
      m.times{|i|
        x=q*s
        (d+1).times{|j|
          x+=r[i+j<m ? i+j : i+j-m]
          y<<x
        }
      }
      if q>1
        m.times{|i|
          x=(q-1)*s
          m.times{|j|
            x+=r[i+j<m ? i+j : i+j-m]
            y<<x
          }
        }
      end
    end
  }.max
}.max
