#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
void ex_gcd(long long a, long long b, long long &d, long long &x,
            long long &y) {
  if (b == 0) {
    d = a, x = 1, y = 0;
    return;
  }
  ex_gcd(b, a % b, d, y, x);
  y -= x * (a / b);
}
inline long long mull(long long a, long long b, long long p) {
  return (a * b - (long long)((long double)a / p * b) * p + p) % p;
}
long long ex_china(long long a[], long long m[], int n) {
  long long M = m[1];
  long long ans = a[1];
  long long d, x, y;
  for (int i = 2; i <= n; i++) {
    long long c = ((a[i] - ans) % m[i] + m[i]) % m[i];
    ex_gcd(M, m[i], d, x, y);
    if (c % d) return -1;
    long long mod = m[i] / d;
    x = mull(x, c / d, mod);
    ans += x * M;
    M *= mod;
    ans = (ans % M + M) % M;
  }
  return ans;
}
long long a[N], mm[N];
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 / gcd(a, b) * b; }
void solve(int kase) {
  long long n, m;
  int k;
  scanf("%lld%lld", &n, &m);
  scanf("%d", &k);
  long long LCM = 1;
  for (int i = 1; i <= k; i++) {
    scanf("%lld", &a[i]);
    LCM = lcm(LCM, a[i]);
  }
  if (LCM > n || LCM < 1) {
    printf("NO\n");
    return;
  }
  for (int i = 1; i <= k; i++) mm[i] = a[i];
  for (int i = 1; i <= k; i++) a[i] = -i;
  long long x = ex_china(a, mm, k);
  if (x < 0 || x + k > m) {
    printf("NO\n");
    return;
  }
  for (long long i = 1; i <= k; i++) {
    if (gcd(LCM, i + x) != mm[i]) {
      printf("NO\n");
      return;
    }
  }
  printf("YES\n");
}
int main() {
  solve(1);
  return 0;
}
