#include <bits/stdc++.h>
using namespace std;
long long R, C, K;
long long mmul(long long x, long long k, long long mod) {
  long long ans = 0;
  x = (x % mod + mod) % mod;
  k = (k % mod + mod) % mod;
  while (k) {
    if (k & 1) ans = (ans + x) % mod;
    x = (x + x) % mod;
    k >>= 1;
  }
  return ans;
}
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; }
long long exgcd(long long &x, long long &y, long long a, long long b) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long x2, y2;
  long long g = exgcd(x2, y2, b, a % b);
  x = y2;
  y = x2 - a / b * y2;
  return g;
}
long long excrt(long long *a, long long *m, int n) {
  long long x = a[1], M = m[1];
  for (int i = 2; i <= n; i++) {
    long long _a = M, _b = m[i], _c = a[i] - x, xx, yy;
    long long g = exgcd(xx, yy, _a, _b);
    if (_c % g != 0) return -1;
    _c /= g;
    _b /= g;
    xx = (mmul(xx, _c, _b) + _b) % _b;
    x += xx * M;
    M *= m[i] / g;
    x = (x % M + M) % M;
  }
  x = (x + M - 1) % M + 1;
  return x;
}
long long m[100000 + 5], a[100000 + 5];
int main() {
  scanf("%lld %lld %lld", &R, &C, &K);
  for (int i = 1; i <= K; i++) scanf("%lld", &m[i]);
  long long row = 1;
  for (int i = 1; i <= K; i++) {
    row = lcm(row, m[i]);
    if (row > R) {
      puts("NO");
      return 0;
    }
    a[i] = (-i + 1 + m[i]) % m[i];
  }
  long long col = excrt(a, m, K);
  if (col == -1 || col == 0 || col + K - 1 > C) {
    puts("NO");
    return 0;
  }
  for (int i = 1; i <= K; i++) {
    if (gcd(row, col + i - 1) != m[i]) {
      puts("NO");
      return 0;
    }
  }
  puts("YES");
}
