#include<cstdio>
#include<iostream>
#include<cstring>
#define RG register
using namespace std;
const int N=1e5+10;
int n,m,q,num[N],cnt,sum[N],pos[N],a[N];
bool vis[N];
template<typename I> inline void read(I &ot){
	I ch=getchar(), x=0, f=1;
	while(ch<'0' || ch>'9'){if(ch=='-') f=-1; ch=getchar();	}
	while(ch>='0' && ch<='9'){x=x*10+ch-'0'; ch=getchar();	}
	ot=x*f;}
template<typename I, typename... U> inline void read(I &x,U&... y){read(x); read(y...);}
template<typename I>inline I mi(const I &a,const I &b){return a<b ? a : b;}
int main()
{
	//freopen("LRU Puzzle.in","r",stdin);
	read(n,m,q);
	for(RG int i=1;i<=q;i++) read(a[i]);
	for(RG int i=q;i;i--)
	 if(!vis[a[i]])
	 {
		num[++cnt]=a[i];
		pos[a[i]]=cnt;
		vis[a[i]]=1;
	 }
	for(RG int i=1, cnt2=0;i<=m;i++) if(!vis[i]) num[cnt+(++cnt2)]=i;
	sum[0]=n;
	for(RG int i=q;i;i--)
	{
		int tt=pos[a[i]];
		if(sum[tt-1])
		{
			sum[tt-1]--;
			sum[tt]++;
		}
	}
	int st=n;
	for(RG int i=0;i<=cnt && st==n;i++) if(sum[i]) st=i;
	for(RG int i=st+2;i<=mi(m,cnt+1);i++)
	 if(num[i]<num[i-1])
	 {
		printf("No\n");
		return 0;
	 }
	printf("Yes\n");
	return 0;
}