package main
import (
"bufio"
"fmt"
"math/bits"
"os"
)
func gcd(a, b int64) int64 {
for b != 0 {
a, b = b, a%b
}
return a
}
func extGCD(a, b int64) (int64, int64, int64) {
if b == 0 {
return a, 1, 0
}
g, x1, y1 := extGCD(b, a%b)
return g, y1, x1 - (a/b)*y1
}
func inv(a, m int64) int64 {
_, x, _ := extGCD(a, m)
return (x%m + m) % m
}
func mulMod(a, b, m int64) int64 {
if m <= 1 {
return 0
}
hi, lo := bits.Mul64(uint64(a), uint64(b))
_, rem := bits.Div64(hi, lo, uint64(m))
return int64(rem)
}
func main() {
in := bufio.NewReader(os.Stdin)
var n, m int64
var k int
if _, err := fmt.Fscan(in, &n, &m, &k); err != nil {
return
}
a := make([]int64, k)
for i := 0; i < k; i++ {
fmt.Fscan(in, &a[i])
}
M := int64(1)
J := int64(0)
for l := 0; l < k; l++ {
al := a[l]
g := gcd(M, al)
X := -int64(l) - J
if X%g != 0 {
fmt.Println("NO")
return
}
A := M / g
B := al / g
C := X / g
C = (C%B + B) % B
invA := inv(A, B)
x := mulMod(C, invA, B)
if n/M < B {
fmt.Println("NO")
return
}
J = J + x*M
M = M * B
J = J % M
}
if J == 0 {
J = M
}
if J+int64(k)-1 > m {
fmt.Println("NO")
return
}
for l := 0; l < k; l++ {
if gcd(M, J+int64(l)) != a[l] {
fmt.Println("NO")
return
}
}
fmt.Println("YES")
}