There are N arrays. The length of each array is M and initially each array contains integers (1，2，...，M) in this order.

Mr. Takahashi has decided to perform Q operations on those N arrays. For the i-th (1≤i≤Q) time, he performs the following operation.

* Choose an arbitrary array from the N arrays and move the integer a_i (1≤a_i≤M) to the front of that array. For example, after performing the operation on a_i=2 and the array (5，4，3，2，1), this array becomes (2，5，4，3，1).



Mr. Takahashi wants to make N arrays exactly the same after performing the Q operations. Determine if it is possible or not.

Constraints

* 2≤N≤10^5
* 2≤M≤10^5
* 1≤Q≤10^5
* 1≤a_i≤M

Input

The input is given from Standard Input in the following format:


N M
Q
a_1 a_2 ... a_Q


Output

Print `Yes` if it is possible to make N arrays exactly the same after performing the Q operations. Otherwise, print `No`.

Examples

Input

2 2
3
2 1 2


Output

Yes


Input

3 2
3
2 1 2


Output

No


Input

2 3
3
3 2 1


Output

Yes


Input

3 3
6
1 2 2 3 3 3


Output

No
#include <bits/stdc++.h>
#define FOR(i, begin, end) for(int i=(begin);i<(end);i++)
#define REP(i, n) FOR(i,0,n)
#define IFOR(i, begin, end) for(int i=(end)-1;i>=(begin);i--)
#define IREP(i, n) IFOR(i,0,n)
#define SORT(a) sort(a.begin(), a.end())
#define REVERSE(a) reverse(a.begin(), a.end())
#define Lower_bound(v, x) distance(v.begin(), lower_bound(v.begin(), v.end(), x))
#define Upper_bound(v, x) distance(v.begin(), upper_bound(v.begin(), v.end(), x))
#define int long long
#define INF 1000000000000000000
using namespace std;

typedef vector<int> vec;
typedef vector<vec> mat;
typedef pair<int, int> Pii;

#define ANS(f) if(f) cout << "YES" << endl; else cout << "NO" << endl;

template<typename T>
void readv(vector<T> &a){ REP(i, a.size()) cin >> a[i]; }
void readi(vector<int> &a){ REP(i, a.size()){cin >> a[i]; a[i]--;} }



signed main(){

    int N, M; cin >> N >> M;
    int Q; cin >> Q;
    vec a(Q); readi(a);

    vec order(M, -1), count(M, 0), v(0);
    int n = 0;
    IREP(i, Q){
        if(order[a[i]] == -1){
            order[a[i]] = n;
            count[n]++;
            n++;
            v.push_back(a[i]);
        }else if(order[a[i]] == 0){
            count[0]++;
        }else if(count[order[a[i]]] < count[order[a[i]] - 1]){
            count[order[a[i]]]++;
        }
    }

    vector<bool> used(M, false);
    REP(i, M){
        if(count[i] >= N) used[v[i]] = true;
        else break;
    }
    bool f = true;
    int mval = -1;
    IREP(i, Q){
        if(!used[a[i]]){
            if(a[i] < mval && mval != -1) f = false;
            used[a[i]] = true;
            mval = a[i];
        }
    }
    IREP(i, M) if(i < mval && !used[i]) f = false;
    if(f) cout << "Yes";
    else cout << "No"; 

    return 0;
}