#include <bits/stdc++.h>
using namespace std;
inline int rd() {
  int x = 0;
  char IO = getchar();
  bool f = 0;
  while ((IO < '0' || IO > '9') && IO != '-') IO = getchar();
  if (IO == '-') f = 1, IO = getchar();
  while (IO >= '0' && IO <= '9')
    x = (x << 3) + (x << 1) + (IO ^ 48), IO = getchar();
  return f ? -x : x;
}
const int SIZE = 10005;
long long n, M;
int k;
long long a[SIZE];
long long Ksc(long long a, long long b, long long P) {
  long long res = 0;
  while (b) {
    if (b & 1) res = (res + a) % P;
    b >>= 1;
    a = (a + a) % P;
  }
  return res;
}
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 g = exgcd(b, a % b, y, x);
  y = y - a / b * x;
  return g;
}
long long gcd(long long a, long long b) {
  while (b ^= a ^= b ^= a %= b)
    ;
  return a;
}
void _main() {
  scanf("%lld%lld%d", &n, &M, &k);
  long long A, m, x, y;
  for (register int i = 0, _n = k; i < _n; ++i) {
    scanf("%lld", a + i);
    if (i == 0)
      A = 0, m = a[i];
    else {
      long long g = exgcd(m, a[i], x, y);
      long long c = ((-i) % a[i] + a[i]) % a[i] - A;
      if (c % g) {
        puts("NO");
        return;
      }
      c = (c / g % a[i] + a[i]) % a[i];
      x = (Ksc(x, c, a[i]) % a[i] + a[i]) % a[i];
      A = m * x + A;
      m = m / g * a[i];
      A = (A % m + m) % m;
    }
  }
  if (A == 0) A = m;
  if (m >= 1 && m <= n && A >= 1 && A <= M - k + 1) {
    for (register int i = 0, _n = k; i < _n; ++i)
      if (gcd(m, A + i) != a[i]) {
        puts("NO");
        return;
      }
    puts("YES");
  } else {
    puts("NO");
  }
}
int main() {
  _main();
  return 0;
}
