package main
import (
"fmt"
"io"
"os"
)
type FastScanner struct {
data []byte
idx int
}
func (fs *FastScanner) NextInt() int {
n := len(fs.data)
for fs.idx < n {
c := fs.data[fs.idx]
if c >= '0' && c <= '9' {
break
}
fs.idx++
}
val := 0
for fs.idx < n {
c := fs.data[fs.idx]
if c < '0' || c > '9' {
break
}
val = val*10 + int(c-'0')
fs.idx++
}
return val
}
func main() {
data, _ := io.ReadAll(os.Stdin)
fs := FastScanner{data: data}
n := fs.NextInt()
m := fs.NextInt()
a := make([]int, n)
maxA := 0
for i := 0; i < n; i++ {
v := fs.NextInt()
a[i] = v
if v > maxA {
maxA = v
}
}
const INF = int(1e9)
best := make([]int, maxA+1)
for i := 0; i <= maxA; i++ {
best[i] = INF
}
for i := 0; i < n; i++ {
b := fs.NextInt()
d := a[i] - b
if d < best[a[i]] {
best[a[i]] = d
}
}
for i := 1; i <= maxA; i++ {
if best[i] > best[i-1] {
best[i] = best[i-1]
}
}
dp := make([]int64, maxA+1)
for i := 1; i <= maxA; i++ {
if best[i] != INF {
dp[i] = dp[i-best[i]] + 2
}
}
globalBest := int64(best[maxA])
maxAL := int64(maxA)
var ans int64
for i := 0; i < m; i++ {
c := fs.NextInt()
if c <= maxA {
ans += dp[c]
} else {
cc := int64(c)
k := (cc - maxAL + globalBest - 1) / globalBest
rem := int(cc - k*globalBest)
ans += 2*k + dp[rem]
}
}
fmt.Print(ans)
}