#include <iostream>
#include <cstdio>
#include <set>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <ctime>
#include <stack>
#include <cassert>
#include <list>
//#include <unordered_set>
using namespace std;
typedef long long li;
typedef long double ld;
typedef vector<int> vi;
typedef pair<int,int> pi;

#define mp make_pair
#define pb push_back
#define all(s) s.begin(), s.end()
void solve();

int main() {
#ifdef DEBUG
    freopen("input", "r", stdin);
    //freopen("output", "w", stdout);
    clock_t start = clock();
#else
    
    freopen("taxi.in", "r", stdin);
    freopen("taxi.out", "w", stdout);
#endif
    ios_base::sync_with_stdio(false);
    int t = 1;
    //cin >> t;
    while (t--)
        solve();

#ifdef DEBUG
    //cout << "\n\n\nTime:" << ((clock() - start) / 1.0 / CLOCKS_PER_SEC);
#endif
    return 0;
}
/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 * @author RiaD
 */

li a[501010];

     void solve() {
		li m,d,n;
		cin >> m >> d >> n;
        for(int i = 0; i < n; ++i)
			cin >> a[i];
        
        sort(a, a + n);

        if(a[n - 1] >= d + m) {
            cout << 1;
            return;
        }

        int badIndex = 0;
        long goodPos = d;

        for(int i = 0; i <= n; ++i) {
            if(i == n) {
                cout << 0;
                return;
            }
            if(a[i] >= m - d) {
              //  System.err.println("bad " + a[i]);
                goodPos = (a[i] - (m - d)) / 2;
                badIndex = i;
                break;
            }

        }



        long last = m - d;

        int ans = 1;
        for(int i = n - 1; i >= 0; --i) {
            if(i == badIndex)
                continue;
            //System.err.println("see " + a[i]);
            if(a[i] < d) {
                cout << 0;
                return;
            }
            d -= a[i] - d;


            if(d <= -last) {
                cout << ans;

                return;
            }
            ++ans;
            if(d <= goodPos) {
                cout << ans;
                return;
            }

        }

        cout << 0;

    }