package main
import (
"bufio"
"fmt"
"math/bits"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
var n, m int
fmt.Fscan(in, &n, &m)
l := make([]int, n)
for i := 0; i < n; i++ {
fmt.Fscan(in, &l[i])
}
s := make([]int64, n)
for i := 0; i < n; i++ {
fmt.Fscan(in, &s[i])
}
C := make([]int64, n+m+1)
for i := 1; i <= n+m; i++ {
fmt.Fscan(in, &C[i])
}
const INF int64 = 1e18
dp := make([][]int64, m+1)
for i := 1; i <= m; i++ {
dp[i] = make([]int64, n+1)
for j := 0; j <= n; j++ {
dp[i][j] = -INF
}
dp[i][0] = 0
}
for i := n - 1; i >= 0; i-- {
w := l[i]
s_i := s[i]
for c := n - 1; c >= 0; c-- {
if dp[w][c] != -INF {
var gain int64 = 0
ones := bits.TrailingZeros(^uint(c))
for j := 0; j <= ones; j++ {
gain += C[w+j]
}
val := dp[w][c] + gain - s_i
if val > dp[w][c+1] {
dp[w][c+1] = val
cv := w
cc := c + 1
for cv < m {
nc := cc / 2
if dp[cv][cc] > dp[cv+1][nc] {
dp[cv+1][nc] = dp[cv][cc]
cv++
cc = nc
} else {
break
}
}
}
}
}
}
var ans int64 = 0
for i := 1; i <= m; i++ {
for j := 0; j <= n; j++ {
if dp[i][j] > ans {
ans = dp[i][j]
}
}
}
fmt.Println(ans)
}