#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 10;
template <typename T>
inline void read(T &x) {
  x = 0;
  static long long f = 1;
  static char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
  x *= f;
}
inline long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
inline void exgcd(long long a, long long b, long long &g, long long &x,
                  long long &y) {
  if (!b) {
    x = 1, y = 0, g = a;
    return;
  }
  exgcd(b, a % b, g, x, y);
  long long tmp = x;
  x = y;
  y = tmp - a / b * y;
}
long long n, p, k, lcm(1);
long long m[maxn], a[maxn];
inline long long China() {
  for (int i = 1; i <= k; ++i) a[i] = 1 - i;
  long long A = a[1], M = m[1];
  for (int i = 2; i <= k; ++i) {
    long long x, y, data = a[i] - A, g;
    exgcd(M, m[i], g, x, y);
    if (data % g) return -1;
    long long tmp = m[i] / g;
    x *= data / g;
    x = (x % tmp + tmp) % tmp;
    A += x * M;
    M = M * m[i] / g;
    A = (A + M) % M;
  }
  return A;
}
inline bool check() {
  if (lcm > n) return 0;
  long long ans = China();
  if (ans < 0) return 0;
  if (ans == 0) ans = lcm;
  if (ans + k - 1 > p) return 0;
  for (int i = 1; i <= k; ++i)
    if (gcd(lcm, ans + i - 1) != m[i]) return 0;
  return 1;
}
int main() {
  read(n);
  read(p);
  read(k);
  for (int i = 1; i <= k; ++i) read(m[i]);
  for (int i = 1; i <= k; ++i) {
    lcm = lcm / gcd(lcm, m[i]) * m[i];
    if (lcm > n) break;
  }
  if (check())
    puts("YES");
  else
    puts("NO");
  return 0;
}
