```go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
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 modInverse(n int64) int64 {
return power(n, MOD-2)
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
buf := make([]byte, 0, 64*1024)
scanner.Buffer(buf, 1024*1024)
scanInt := func() int {
scanner.Scan()
n, _ := strconv.Atoi(scanner.Text())
return n
}
if !scanner.Scan() {
return
}
t, _ := strconv.Atoi(scanner.Text())
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
fact := make([]int64, 200005)
fact[0] = 1
for i := 1; i <= 200000; i++ {
fact[i] = (fact[i-1] * int64(i)) % MOD
}
for i := 0; i < t; i++ {
n := scanInt()
m1 := scanInt()
m2 := scanInt()
p := make([]int, m1)
for j := 0; j < m1; j++ {
p[j] = scanInt()
}
s := make([]int, m2)
for j := 0; j < m2; j++ {
s[j] = scanInt()
}
if p[0] != 1 || s[m2-1] != n || p[m1-1] != s[0] {
fmt.Fprintln(writer, 0)
continue
}
num := fact[n-1]
den := int64(1)
for j := 1; j < m1; j++ {
den = (den * int64(p[j]-1)) % MOD
}
for j := 0; j < m2-1; j++ {
den = (den * int64(n-s[j])) % MOD
}
ans := (num * modInverse(den)) % MOD
fmt.Fprintln(writer, ans)
}
}
```