#include <bits/stdc++.h>
using namespace std;
long long gcd(long long x, long long y) { return !y ? x : gcd(y, x % y); }
long long exgcd(long long x, long long y, long long &a, long long &b) {
  if (!y) return a = 1, b = 0, x;
  long long r = exgcd(y, x % y, a, b);
  long long t = a;
  a = b;
  b = t - x / y * b;
  return r;
}
long long mul(long long x, long long y, long long z) {
  return ((x * y - z * (long long)((long double)x * y / z + 1e-4)) % z + z) % z;
}
long long crt(long long a1, long long m1, long long a2, long long m2,
              long long &M) {
  long long g = gcd(m1, m2), a, b;
  if ((a2 - a1) % g) return -1;
  m2 /= g;
  long long t = (((a2 - a1) / g) % m2 + m2) % m2;
  exgcd(m1 / g, m2, a, b);
  a = (a % m2 + m2) % m2;
  a = mul(a, t, m2);
  M = m1 * m2;
  return (mul(a, m1, M) + a1) % M;
}
void solve() {
  long long G(0), M(0), t1, t2, c[10010], k;
  cin >> t1 >> t2 >> k;
  for (int i = 1; i <= k; i++) cin >> c[i];
  M = c[1];
  G = ((c[1] - 1) % c[1] + c[1]) % c[1];
  for (int i = 2; i <= k; i++) {
    long long g = ((c[i] - i) % c[i] + c[i]) % c[i], m = c[i];
    if (M / gcd(M, m) > t1 / m) {
      puts("NO");
      return;
    }
    G = crt(g, m, G, M, M);
    if (G == -1) {
      puts("NO");
      return;
    }
  }
  if (G + k > t2) {
    puts("NO");
    return;
  }
  for (int i = 1; i <= k; i++)
    if (gcd(M, G + i) != c[i]) {
      puts("NO");
      return;
    }
  puts("YES");
  return;
}
int main() {
  solve();
  return 0;
}
