#include <bits/stdc++.h>
using namespace std;
const int maxn = 10004;
long long a[maxn], b[maxn];
long long ksmul(long long a, long long b, long long mod) {
  long long ans = 0;
  while (b) {
    if (b & 1) ans = (ans + a) % mod;
    a = (a + a) % mod;
    b >>= 1;
  }
  return ans;
}
long long GCD(long long a, long long b) { return b == 0 ? a : GCD(b, a % b); }
long long LCM(long long a, long long b) { return a * b / GCD(a, b); }
void ex_gcd(long long a, long long b, long long &x, long long &y,
            long long &gcd) {
  if (b == 0) {
    x = 1, y = 0, gcd = a;
    return;
  }
  ex_gcd(b, a % b, x, y, gcd);
  long long t = x;
  x = y, y = t - a / b * y;
}
long long EX_CRT(int n) {
  long long ans = b[1], M = a[1], x, y, c, gcd;
  for (int i = 2; i <= n; i++) {
    c = (b[i] - ans % a[i] + a[i]) % a[i];
    ex_gcd(M, a[i], x, y, gcd);
    if (c % gcd) return -1;
    x = ksmul(x, c / gcd, a[i] / gcd);
    ans += x * M;
    M *= a[i] / gcd;
    ans = (ans % M + M) % M;
  }
  return ans;
}
int main() {
  int k;
  long long n, m, lcm;
  scanf("%I64d%I64d%d", &n, &m, &k);
  scanf("%I64d", &a[1]);
  lcm = a[1];
  b[1] = (-1 + a[1]) % a[1];
  for (int i = 2; i <= k; i++) {
    scanf("%I64d", &a[i]);
    lcm = LCM(lcm, a[i]);
    b[i] = (-i) % a[i] + a[i];
  }
  if (lcm > n || lcm < 1) {
    printf("NO");
    return 0;
  }
  long long x = EX_CRT(k);
  if (x < 0 || x + k > m) {
    printf("NO");
    return 0;
  }
  for (int i = 1; i <= k; i++)
    if (GCD(lcm, x + i) != a[i]) {
      printf("NO");
      return 0;
    }
  printf("YES");
  return 0;
}
