#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
long long x, y, tmp;
long long n, m, k, b[MAXN], a[MAXN];
inline long long read() {
  long long x = 0;
  char ch = getchar();
  while (!isdigit(ch)) ch = getchar();
  while (isdigit(ch)) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x;
}
inline long long gcd(long long x, long long y) {
  if (!y) return x;
  return gcd(y, x % y);
}
inline long long lcm(long long x, long long y) {
  long long g = gcd(x, y);
  return x / g * y;
}
inline long long smul(long long x, long long y, long long p) {
  long long r = 0, k = x % p;
  for (; y; y >>= 1) {
    if (y & 1) r += k, r %= p;
    k <<= 1, k %= p;
  }
  return r;
}
long long exgcd(long long a, long long b) {
  if (!b) {
    x = 1, y = 0;
    return a;
  }
  long long g = exgcd(b, a % b);
  tmp = x, x = y, y = tmp - a / b * y;
  return g;
}
inline long long excrt(int n) {
  long long M = b[1], ans = a[1];
  for (int i = 2; i <= n; i++) {
    long long a = M, b = ::b[i], c = (::a[i] - ans % b + b) % b;
    long long g = exgcd(a, b), bg = b / g;
    if (c % g) return -1;
    x = smul(x, c / g, bg), ans += x * M, M *= bg, ((ans %= M) += M) %= M;
  }
  ans = (ans % M + M) % M;
  ans = (ans + M - 1) % M + 1;
  if (ans < 1 || ans + k - 1 > m) return -1;
  return ans;
}
inline int solve() {
  long long x = 1;
  for (int i = 1; i <= k; i++) {
    x = lcm(x, b[i]);
    if (x > n) return puts("NO"), 0;
    a[i] = ((b[i] - i + 1) % b[i] + b[i]) % b[i];
  }
  long long kk = excrt(k);
  if (kk == -1) return puts("NO"), 0;
  for (int i = 1; i <= k; i++)
    if (gcd(x, kk + i - 1) != b[i]) return puts("NO"), 0;
  return puts("YES"), 0;
}
int main() {
  n = read(), m = read(), k = read();
  for (int i = 1; i <= k; i++) b[i] = read();
  return solve();
}
