package main
import (
"bufio"
"fmt"
"os"
)
const MOD = 1000000007
func power(base, exp int64) int64 {
res := int64(1)
base %= MOD
for exp > 0 {
if exp%2 == 1 {
res = (res * base) % MOD
}
base = (base * base) % MOD
exp /= 2
}
return res
}
func readInt(reader *bufio.Reader) int64 {
var res int64
var sign int64 = 1
var c byte
var err error
for {
c, err = reader.ReadByte()
if err != nil {
return 0
}
if c >= '0' && c <= '9' {
break
}
if c == '-' {
sign = -1
}
}
res = int64(c - '0')
for {
c, err = reader.ReadByte()
if err != nil {
break
}
if c >= '0' && c <= '9' {
res = res*10 + int64(c-'0')
} else {
break
}
}
return res * sign
}
func main() {
reader := bufio.NewReader(os.Stdin)
n := readInt(reader)
if n == 0 {
return
}
m := readInt(reader)
s1 := make([]int64, n)
for i := int64(0); i < n; i++ {
s1[i] = readInt(reader)
}
s2 := make([]int64, n)
for i := int64(0); i < n; i++ {
s2[i] = readInt(reader)
}
minv := power(m, MOD-2)
m2inv := power((2*m)%MOD, MOD-2)
ans := int64(0)
eq := int64(1)
for i := int64(0); i < n; i++ {
a := s1[i]
b := s2[i]
if a == 0 && b == 0 {
prob_gt := ((m - 1) * m2inv) % MOD
ans = (ans + eq*prob_gt) % MOD
eq = (eq * minv) % MOD
} else if a == 0 && b != 0 {
prob_gt := ((m - b) * minv) % MOD
ans = (ans + eq*prob_gt) % MOD
eq = (eq * minv) % MOD
} else if a != 0 && b == 0 {
prob_gt := ((a - 1) * minv) % MOD
ans = (ans + eq*prob_gt) % MOD
eq = (eq * minv) % MOD
} else {
if a > b {
ans = (ans + eq) % MOD
break
} else if a < b {
break
}
}
}
fmt.Println(ans)
}