学习了大佬的方法
// Decline is inevitable,
// Romance will last forever.
#include <bits/stdc++.h>
using namespace std;
//#define mp make_pair
#define pii pair<int,int>
#define pb push_back
#define ll long long
#define LL long long
#define ld long double
#define endl '\n'
#define RE0 return 0
#define For(i,j,k) for (int i=(int)(j);i<=(int)(k);i++)
#define Rep(i,j,k) for (int i=(int)(j);i>=(int)(k);i--)
#define mod(a, b) a < b ? a : a % b + b
#define int long long
const int maxn = 1e4 + 10;
const int P = 998244353; //998244353
const int INF = 0x7f7f7f7f;
inline LL exgcd(LL a, LL b, LL &x, LL &y) {
if(!b) {x = 1; y = 0; return a;}
LL d = exgcd(b, a%b, x, y);
LL z = x; x = y; y = z - y * (a / b);
return d;
}
inline ll inv(ll a, ll p) {
ll x, y;
exgcd(a, p, x, y);
return (x % p + p) % p;
}
inline ll mul(ll a, ll b, ll p) {
LL ans = 0;
a %= p;
for (; b; b >>= 1) {
if (b & 1) ans = (ans + a) % p;
a = (a + a) % p;
}
return ans;
}
/*
inline ll excrt(ll m[], ll a[], ll n) { //m[]模数数组,a[]余数数组
ll x, y;
ll M = m[1], ans = a[1];
for(int i = 2; i <= n; i++) {
ll q = M, b = m[i],c = (a[i] - ans % b + b) % b;//qx≡c(mod b)
ll gcd = exgcd(q, b, x, y), bg = b / gcd;
if(c % gcd != 0)
return -1; //判断是否无解,然而这题其实不用
x = mul(x, c/gcd, bg);
ans += x * M;//更新前k个方程组的答案
M *= bg; //M为前k个m的lcm
ans = (ans % M + M) % M;
}
return (ans % M + M) % M;
}
*/
ll excrt(ll m[], ll a[], ll n)
{
ll M=m[1], ans=a[1];
for(int i=2;i<=n;++i)
{
ll k1,k2,g=exgcd(M,m[i],k1,k2);
if((a[i]-ans)%g)return -1;
k1=(a[i]-ans)/g*k1%m[i];
ans+=k1*M;
M=M/g*m[i];
ans%=M;
}
return (ans-1+M)%M+1;
}
inline LL gcd(LL a, LL b) {
return b?gcd(b,a%b):a;
}
inline LL lcm(LL a, LL b) {
return a / gcd(a, b) * b;
}
int n, m, k;
int a[maxn];
int b[maxn];
void solve() {
cin >> n >> m >> k;
int l = 1;
for(int i = 1; i <= k; i++) {
cin >> a[i];
l = lcm(l, a[i]);
}
if(l > n) {
cout << "NO\n";
return;
}
for(int i = 1; i <= k; i++) {
b[i] = (-i + 1);
}
int ans = excrt(a, b, k);
// cout << l << ' ' << ans << endl;
if(ans + k - 1 > m || ans < 1) {
cout << "NO\n";
return;
}
for(int i = 0; i < k; i++) {
if(gcd(l, i + ans) != a[i + 1]) {
cout << "NO\n";
return;
}
}
cout << "YES\n";
}
signed main() {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
// int T; scanf("%d", &T); while(T--)
// freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
// int T; cin >> T; while(T--)
solve();
RE0;
}