OI VIII - kop

// https://szkopul.edu.pl/problemset/problem/TYf8i2qvrGI0l8QHEYJXO5dG/site/?key=statement

#include <bits/stdc++.h>

// #define GARY_DBG
#define GARY_LIB

constexpr int sizik = 70005;
constexpr int OFFSET = 40002;

#define ar std::array

typedef std::vector<std::vector<int>> _kra;

struct Event {
    int x, y;
    bool isEnd;
};

struct D {
    int add_val, max_val;
};

D d[4 * sizik];

void update(int v, int tl, int tr, int l, int r, int x) {
    if (l > r) return;
    if (l == tl && tr == r) {
        d[v].add_val += x;
        d[v].max_val += x;
        return;
    }
    int tm = (tl + tr) / 2;
    update(2 * v, tl, tm, l, std::min(r, tm), x);
    update(2 * v + 1, tm + 1, tr, std::max(l, tm + 1), r, x);
    d[v].max_val = d[v].add_val + std::max(d[2 * v].max_val, d[2 * v + 1].max_val);
}

int get_ans() {
    return d[1].max_val;
}

void solve() {
    int s, w;
    std::cin >> s >> w;

    int n;
    std::cin >> n;

    std::vector<Event> events;
    events.reserve(2 * n);

    for (int i = 0; i < n; i++) {
        int x, y;
        std::cin >> x >> y;
        y += OFFSET;
        events.push_back({x - s, y, false});
        events.push_back({x + 1, y, true});
    }

    std::sort(events.begin(), events.end(), [](const Event& e1, const Event& e2) {
        if (e1.x == e2.x) {
            return e1.isEnd > e2.isEnd;
        } else {
            return e1.x < e2.x;
        }
    });

    int ans = 0;

    for (const auto& [x, y, b] : events) {
        int m = b ? -1 : 1;

        update(1, 1, sizik - 1, y - w, y, m);

        ans = std::max(ans, get_ans());
    }

    std::cout << ans << '\n';
}

int32_t main() {
#ifndef GARY_DBG
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);
#endif

    int t = 1;
    // std::cin >> t;

    for (; t > 0; t--) {
        solve();
    }

    return 0;
}