#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
const int mod = 1e9 + 7;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long mul(long long a, long long b, long long P) {
  long long s = 0;
  for (; b; b >>= 1, a = (a + a) % P)
    if (b & 1) s = (s + a) % P;
  return s;
}
long long exgcd(long long a, long long b, long long &x, long long &y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long r = exgcd(b, a % b, x, y);
  long long xx = x;
  long long yy = y;
  x = yy;
  y = xx - a / b * yy;
  return r;
}
long long EXCRT(long long *p, long long *a, int len) {
  long long M = p[1], ans = a[1], x, y;
  for (int i = 2; i <= len; i++) {
    long long B = ((a[i] - ans) % p[i] + p[i]) % p[i];
    long long g = exgcd(M, p[i], x, y);
    if ((ans - a[i]) % g) return 1e18;
    x = mul(x, B / g, p[i]);
    ans += M * x;
    M *= p[i] / g;
    ans = (ans + M) % M;
  }
  long long A = (ans % M + M) % M;
  return A == 0 ? M : A;
}
long long lcm(long long x, long long y) { return x / gcd(x, y) * y; }
long long p[N], a[N];
long long n, m, k;
int main() {
  scanf("%lld%lld%lld", &n, &m, &k);
  long long tmp = 1;
  for (int i = 1; i <= k; i++) {
    scanf("%lld", &p[i]);
    a[i] = (-(i - 1) % p[i] + p[i]) % p[i];
    tmp = lcm(tmp, p[i]);
    if (tmp > n) puts("NO"), exit(0);
  }
  long long y = EXCRT(p, a, k);
  if (y == 1e18) puts("NO"), exit(0);
  for (long long i = y; i <= y + k - 1; i++) {
    if (i > m) puts("NO"), exit(0);
    if (gcd(tmp, i) != p[i - y + 1]) puts("NO"), exit(0);
  }
  puts("YES");
}
