-- https://github.com/minoki/my-atcoder-solutions
{-# LANGUAGE BangPatterns #-}
import Data.Char (isSpace)
import Data.Int (Int64)
import Data.List (unfoldr)
import Data.Bifunctor (first)
import Control.Monad
import Control.Monad.ST
import qualified Data.Vector.Unboxed as U
import qualified Data.Vector.Unboxed.Mutable as UM
import qualified Data.ByteString.Char8 as BS

main = do
  n <- readLn
  hs <- U.unfoldrN n (BS.readInt . BS.dropWhile isSpace) <$> BS.getLine
  as <- U.unfoldrN n (readInt64 . BS.dropWhile isSpace) <$> BS.getLine
  let ht = U.create $ do
        ht <- UM.new n
        flip U.imapM_ hs $ \i h -> do
          UM.write ht (h - 1) i
        return ht
  let (h2i,m) = runST $ do
        h2i <- UM.new n
        let loop !i !j !k | i == n = return k
                          | otherwise = do
                              let j' = ht U.! i
                                  k' = if j < j' then k else k+1
                              UM.write h2i i k'
                              loop (i+1) j' k'
        k <- loop 0 0 0
        h2i <- U.unsafeFreeze h2i
        return (h2i,k+1)
  let result = U.create $ do
        vec <- UM.replicate m 0
        forM_ [0..n-1] $ \i -> do
          let h = hs U.! i
              k = h2i U.! (h-1)
          x <- foldM (\x a -> max x <$> a) 0 [ UM.read vec j | j <- [0..k] ]
          UM.write vec k (x + as U.! i)
        return vec
  print $ U.maximum result

readInt64 :: BS.ByteString -> Maybe (Int64, BS.ByteString)
readInt64 s = first fromIntegral <$> BS.readInt s
