#include <bits/stdc++.h>
using namespace std;
int k;
long long n, m, N;
long long c[10010];
long long gcd(long long x, long long y) { return y == 0 ? x : gcd(y, x % y); }
void exgcd(long long a, long long b, long long c, long long &x, long long &y) {
  long long t;
  if (b == 0) {
    x = c / a;
    y = 0;
    return;
  }
  exgcd(b, a % b, c, x, y);
  t = y;
  y = x - a / b * y;
  x = t;
}
int main() {
  int i, j, flag;
  long long d, l, x, X, Y;
  scanf("%I64d%I64d%d", &n, &m, &k);
  for (i = 1; i <= k; i++) scanf("%I64d", &c[i]);
  N = c[1];
  flag = 1;
  for (i = 2; i <= k; i++) {
    d = gcd(N, c[i]);
    if ((long double)(N / d) * c[i] > n) {
      flag = 0;
      break;
    } else
      N = N / d * c[i];
  }
  if (!flag) {
    printf("NO\n");
    return 0;
  }
  x = c[1];
  l = c[1];
  for (i = 2; i <= k; i++) {
    d = gcd(l, c[i]);
    if ((1 - i - x % c[i]) % d != 0) {
      flag = 0;
      break;
    }
    exgcd(l / d, c[i] / d, 1, X, Y);
    X %= c[i];
    X *= (1 - i - x % c[i]) / d;
    x += X * l;
    l = l / d * c[i];
    x = (x % l + l) % l;
    if (x == 0) x = l;
    if (x > m - k + 1) {
      flag = 0;
      break;
    }
  }
  for (i = 1; i <= k; i++)
    if (gcd(N, x + i - 1) != c[i]) {
      flag = 0;
      break;
    }
  if (x <= m - k + 1 && flag)
    printf("YES\n");
  else
    printf("NO\n");
  return 0;
}
