#include <iostream>
using namespace std;

int main(int argc, char *argv[]){
  int N, M, Q;
  cin >> N >> M;
  cin >> Q;
  int i, j;
  int a[Q];
  for(i=0; i<Q; ++i){
    cin >> a[i];
  }
  int ind[M];
  for(i=0;i<M;++i){ind[i] = -1;}
  int laststock = 0;
  int lastcount[M];
  int before[M];
  int bef = -1;
  for(i=Q-1; i>=0; --i){
    int index = ind[a[i]-1];
    if(index == -1){
      ind[a[i]-1] = laststock;
      lastcount[laststock] = 1;
      laststock++;
    }else{
      if(index == 0 || lastcount[index] < lastcount[index-1]){
        lastcount[index]++;
      }
    }
  }
  int maxind = -1;
  int maxcover = N;
  for(i=0; i<M; ++i){
    if(ind[i] < 0){break;}
    bool f1 = false;
    bool f2 = false;
    if(ind[i] > maxind){
      maxind = ind[i];
      f1 = true;
    }
    if(lastcount[ind[i]] <= maxcover){
      maxcover = lastcount[ind[i]];
      f2 = true;
    }
    if(f1 && f2){
      lastcount[ind[i]] = N;
    }
  }
  bool ans = true;
  for(i=0; i<laststock; ++i){
    if(lastcount[i] < N){
      ans = false;
    }
  }
  if(ans){
    cout << "Yes" << endl;
  }else{
    cout << "No" << endl;
  }
  return 0;
}