3a89ecdaf149cb5f52fcedd2af08a44245345edb7fd64f83a25f74bc8de2e92b
// 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;
}