#include <bits/stdc++.h>
long long a[10010];
long long gcd(long long a, long long b) {
  return a % b == 0 ? b : gcd(b, a % b);
}
long long expand_gcd(long long a, long long b, long long &x, long long &y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long d = expand_gcd(b, a % b, x, y);
  long long tmp = x;
  x = y;
  y = tmp - a / b * y;
  return d;
}
int main() {
  long long n, m;
  int k;
  while (scanf("%I64d%I64d%d", &n, &m, &k) != EOF) {
    long long row = 1;
    memset(a, 0, sizeof(a));
    for (int i = 1; i <= k; i++) {
      scanf("%I64d", &a[i]);
      row = row * a[i] / gcd(row, a[i]);
    }
    if (row <= 0 || row > n) {
      puts("NO");
      continue;
    }
    long long a1 = a[1], r1 = 0;
    long long A, B, C, D, a2, r2;
    long long x, y;
    int ok = 1;
    for (int i = 2; i <= k; i++) {
      a2 = a[i];
      r2 = i - 1;
      A = a1;
      B = -a2;
      C = -r2 - r1;
      D = expand_gcd(A, B, x, y);
      if (C % D) {
        ok = 0;
        break;
      }
      long long t = B / D;
      x = (x * (C / D) % t + t) % t;
      r1 = a1 * x + r1;
      a1 = a1 * (a2 / D);
    }
    if (ok == 0) {
      puts("NO");
      continue;
    }
    long long line = r1;
    if (line <= 0) {
      line += row;
    }
    if (line + k - 1 > m) {
      puts("NO");
      continue;
    }
    for (int i = 1; i <= k; i++) {
      if (gcd(row, line + i - 1) != a[i]) {
        ok = 0;
        break;
      }
    }
    if (ok == 0) {
      puts("NO");
    } else {
      puts("YES");
    }
  }
  return 0;
}
