#include <bits/stdc++.h>
using namespace std;
long long a[10010], p[10010], c[10010], n, m, k;
long long quickmul(long long a, long long b, long long mod) {
  long long res = 0, f = 1;
  if (a < 0) a = -a, f = -f;
  if (b < 0) b = -b, f = -f;
  while (b) {
    if (b & 1) res = (res + a) % mod;
    a = (a + a) % mod;
    b >>= 1;
  }
  return (res * f + mod) % mod;
}
long long gcd(long long a, long long b) {
  if (!b)
    return a;
  else
    return gcd(b, a % b);
}
void exgcd(long long a, long long b, long long& d, long long& x, long long& y) {
  if (!b) {
    d = a;
    x = 1;
    y = 0;
  } else {
    exgcd(b, a % b, d, y, x);
    y -= x * (a / b);
  }
}
long long excrt() {
  long long d, x, y, mod;
  for (int i = 2; i <= k; i++) {
    exgcd(p[1], p[i], d, x, y);
    if ((c[i] - c[1]) % d) return -1;
    mod = p[i] / d;
    x = quickmul(x, (c[i] - c[1]) / d, mod);
    p[1] = p[i] / d * p[1];
    c[1] = (quickmul(p[1] / mod, x, p[1]) + c[1]) % p[1];
  }
  return c[1];
}
int main() {
  cin >> n >> m >> k;
  for (int i = 1; i <= k; i++) cin >> a[i];
  long long lcm = a[1];
  for (int i = 2; i <= k; i++) lcm = lcm / gcd(lcm, a[i]) * a[i];
  if (lcm > n) {
    cout << "NO";
    return 0;
  }
  for (int i = 1; i <= k; i++) {
    p[i] = a[i];
    c[i] = (a[i] - i + 1) % a[i];
  }
  long long res = excrt();
  if (!res) res = p[1];
  if (res == -1 || res > m - k + 1) {
    cout << "NO";
    return 0;
  }
  for (int i = 1; i <= k; i++) {
    if (gcd(lcm, res + i - 1) != a[i]) {
      cout << "NO";
      return 0;
    }
  }
  cout << "YES";
  return 0;
}
