← Home
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)
}