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