#include<bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define ld long double
#define int long long
#define pb push_back
#define f first
#define s second
#define pq priority_queue
#define fast ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define read_file freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
using namespace std;
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;
// template<class T> using ordered_multiset = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
// template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
const int N=2e5+10;
map<int, int> comp;
int uncomp[N];
int nexti[N];
struct segTree{
vector<int> maxi, lazy, allowed;
int n;
void init(int n2){
n=1; while(n<n2) n*=2;
maxi.assign(4*n, 0);
lazy.assign(4*n, 0);
allowed.assign(4*n, 0);
}
void prop(int c){
lazy[2*c+1]+=lazy[c];
lazy[2*c+2]+=lazy[c];
maxi[c]+=lazy[c];
lazy[c]=0;
}
int getCell(int c, int lc, int rc){
return (lc+1==rc?(allowed[c]>0?maxi[c]:0):maxi[c]);
}
void set(int i, int val, int c, int lc, int rc){
prop(c);
if(lc+1==rc){allowed[c]=val; return;}
int m=(lc+rc)/2;
if(i<m) set(i, val, 2*c+1, lc, m);
else set(i, val, 2*c+2, m, rc);
prop(2*c+1); prop(2*c+2);
maxi[c]=max(getCell(2*c+1, lc, m), getCell(2*c+2, m, rc));
}
void set(int i, int val){
set(i, val, 0, 0, n);
}
void increase(int l, int r, int val, int c, int lc, int rc){
if(lc>=l&&rc<=r){
lazy[c]+=val;
prop(c);
return;
}
prop(c);
if(lc>=r||rc<=l) return;
int m=(lc+rc)/2;
increase(l, r, val, 2*c+1, lc, m); increase(l, r, val, 2*c+2, m, rc);
maxi[c]=max(getCell(2*c+1, lc, m), getCell(2*c+2, m, rc));
}
void increase(int l, int r, int val){
increase(l, r, val, 0, 0, n);
}
};
void solve(){
int n, m, k; cin>>n>>m>>k;
vector<pair<int, int>> v1(m);
for(int i=0; i<m; i++) cin>>v1[i].f>>v1[i].s;
sort(v1.begin(), v1.end());
vector<int> ys; for(int i=0; i<m; i++) ys.pb(v1[i].s);
sort(ys.begin(), ys.end());
int cntr=0;
for(int i=0; i<m; i++){
if(comp.count(ys[i])) continue;
comp[ys[i]]=cntr;
uncomp[cntr]=ys[i];
cntr++;
}
for(int i=cntr; i<N; i++) uncomp[i]=2e9;
for(int i=0; i<cntr; i++){
int ind=upper_bound(uncomp+i, uncomp+N, uncomp[i]+k-1)-uncomp;
nexti[i]=ind;
}
comp[2e9]=m;
segTree seg1; seg1.init(m);
int ans=0;
int l=0;
for(int i=0; i<m; i++){
while(l<i&&v1[l].f<=v1[i].f-k){
seg1.increase(comp[v1[l].s], nexti[comp[v1[l].s]], -1);
seg1.set(comp[v1[l].s], -1);
l++;
}
seg1.increase(comp[v1[i].s], nexti[comp[v1[i].s]], 1);
seg1.set(comp[v1[i].s], 1);
ans=max(ans, seg1.maxi[0]);
}
cout<<ans<<endl;
}
int32_t main() {
#ifndef ONLINE_JUDGE
read_file;
#endif
fast;
int t;
t=1;
// cin>>t;
while(t--){
solve();
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSB1bGwgdW5zaWduZWQgbGwKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmIGZpcnN0CiNkZWZpbmUgcyBzZWNvbmQKI2RlZmluZSBwcSBwcmlvcml0eV9xdWV1ZQojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKSxjaW4udGllKDApLGNvdXQudGllKDApCiNkZWZpbmUgcmVhZF9maWxlIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOyBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLy8gI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgovLyAjaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KLy8gdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CiAKLy8gdGVtcGxhdGU8Y2xhc3MgVD4gdXNpbmcgb3JkZXJlZF9tdWx0aXNldCA9IHRyZWU8VCwgbnVsbF90eXBlLCBsZXNzX2VxdWFsPFQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKLy8gdGVtcGxhdGU8Y2xhc3MgVD4gdXNpbmcgb3JkZXJlZF9zZXQgPSB0cmVlPFQsIG51bGxfdHlwZSwgbGVzczxUPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47Cgpjb25zdCBpbnQgTj0yZTUrMTA7Cm1hcDxpbnQsIGludD4gY29tcDsKaW50IHVuY29tcFtOXTsKaW50IG5leHRpW05dOwoKc3RydWN0IHNlZ1RyZWV7CiAgICB2ZWN0b3I8aW50PiBtYXhpLCBsYXp5LCBhbGxvd2VkOwogICAgaW50IG47CiAgICB2b2lkIGluaXQoaW50IG4yKXsKICAgICAgICBuPTE7IHdoaWxlKG48bjIpIG4qPTI7CiAgICAgICAgbWF4aS5hc3NpZ24oNCpuLCAwKTsKICAgICAgICBsYXp5LmFzc2lnbig0Km4sIDApOwogICAgICAgIGFsbG93ZWQuYXNzaWduKDQqbiwgMCk7CiAgICB9CgogICAgdm9pZCBwcm9wKGludCBjKXsKICAgICAgICBsYXp5WzIqYysxXSs9bGF6eVtjXTsKICAgICAgICBsYXp5WzIqYysyXSs9bGF6eVtjXTsKICAgICAgICBtYXhpW2NdKz1sYXp5W2NdOwoKICAgICAgICBsYXp5W2NdPTA7CiAgICB9CgogICAgaW50IGdldENlbGwoaW50IGMsIGludCBsYywgaW50IHJjKXsKICAgICAgICByZXR1cm4gKGxjKzE9PXJjPyhhbGxvd2VkW2NdPjA/bWF4aVtjXTowKTptYXhpW2NdKTsKICAgIH0KCiAgICB2b2lkIHNldChpbnQgaSwgaW50IHZhbCwgaW50IGMsIGludCBsYywgaW50IHJjKXsKICAgICAgICBwcm9wKGMpOwogICAgICAgIGlmKGxjKzE9PXJjKXthbGxvd2VkW2NdPXZhbDsgcmV0dXJuO30KCiAgICAgICAgaW50IG09KGxjK3JjKS8yOwogICAgICAgIGlmKGk8bSkgc2V0KGksIHZhbCwgMipjKzEsIGxjLCBtKTsKICAgICAgICBlbHNlIHNldChpLCB2YWwsIDIqYysyLCBtLCByYyk7CgogICAgICAgIHByb3AoMipjKzEpOyBwcm9wKDIqYysyKTsKCiAgICAgICAgbWF4aVtjXT1tYXgoZ2V0Q2VsbCgyKmMrMSwgbGMsIG0pLCBnZXRDZWxsKDIqYysyLCBtLCByYykpOwogICAgfQogICAgdm9pZCBzZXQoaW50IGksIGludCB2YWwpewogICAgICAgIHNldChpLCB2YWwsIDAsIDAsIG4pOwogICAgfQoKICAgIHZvaWQgaW5jcmVhc2UoaW50IGwsIGludCByLCBpbnQgdmFsLCBpbnQgYywgaW50IGxjLCBpbnQgcmMpewogICAgICAgIGlmKGxjPj1sJiZyYzw9cil7CiAgICAgICAgICAgIGxhenlbY10rPXZhbDsKICAgICAgICAgICAgcHJvcChjKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBwcm9wKGMpOwogICAgICAgIGlmKGxjPj1yfHxyYzw9bCkgcmV0dXJuOwoKICAgICAgICBpbnQgbT0obGMrcmMpLzI7CiAgICAgICAgaW5jcmVhc2UobCwgciwgdmFsLCAyKmMrMSwgbGMsIG0pOyBpbmNyZWFzZShsLCByLCB2YWwsIDIqYysyLCBtLCByYyk7CgogICAgICAgIG1heGlbY109bWF4KGdldENlbGwoMipjKzEsIGxjLCBtKSwgZ2V0Q2VsbCgyKmMrMiwgbSwgcmMpKTsKICAgIH0KICAgIHZvaWQgaW5jcmVhc2UoaW50IGwsIGludCByLCBpbnQgdmFsKXsKICAgICAgICBpbmNyZWFzZShsLCByLCB2YWwsIDAsIDAsIG4pOwogICAgfQp9OwoKdm9pZCBzb2x2ZSgpewogICAgaW50IG4sIG0sIGs7IGNpbj4+bj4+bT4+azsKICAgIHZlY3RvcjxwYWlyPGludCwgaW50Pj4gdjEobSk7CiAgICBmb3IoaW50IGk9MDsgaTxtOyBpKyspIGNpbj4+djFbaV0uZj4+djFbaV0uczsKCiAgICBzb3J0KHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKCiAgICB2ZWN0b3I8aW50PiB5czsgZm9yKGludCBpPTA7IGk8bTsgaSsrKSB5cy5wYih2MVtpXS5zKTsKICAgIHNvcnQoeXMuYmVnaW4oKSwgeXMuZW5kKCkpOwoKICAgIGludCBjbnRyPTA7CiAgICBmb3IoaW50IGk9MDsgaTxtOyBpKyspewogICAgICAgIGlmKGNvbXAuY291bnQoeXNbaV0pKSBjb250aW51ZTsKICAgICAgICBjb21wW3lzW2ldXT1jbnRyOwogICAgICAgIHVuY29tcFtjbnRyXT15c1tpXTsKCiAgICAgICAgY250cisrOwogICAgfQoKICAgIGZvcihpbnQgaT1jbnRyOyBpPE47IGkrKykgdW5jb21wW2ldPTJlOTsKCiAgICBmb3IoaW50IGk9MDsgaTxjbnRyOyBpKyspewogICAgICAgIGludCBpbmQ9dXBwZXJfYm91bmQodW5jb21wK2ksIHVuY29tcCtOLCB1bmNvbXBbaV0ray0xKS11bmNvbXA7CiAgICAgICAgbmV4dGlbaV09aW5kOwogICAgfQogICAgY29tcFsyZTldPW07CgogICAgc2VnVHJlZSBzZWcxOyBzZWcxLmluaXQobSk7CiAgICBpbnQgYW5zPTA7CiAgICBpbnQgbD0wOwogICAgZm9yKGludCBpPTA7IGk8bTsgaSsrKXsKICAgICAgICB3aGlsZShsPGkmJnYxW2xdLmY8PXYxW2ldLmYtayl7CiAgICAgICAgICAgIHNlZzEuaW5jcmVhc2UoY29tcFt2MVtsXS5zXSwgbmV4dGlbY29tcFt2MVtsXS5zXV0sIC0xKTsKICAgICAgICAgICAgc2VnMS5zZXQoY29tcFt2MVtsXS5zXSwgLTEpOwogICAgICAgICAgICBsKys7CiAgICAgICAgfQogICAgICAgIHNlZzEuaW5jcmVhc2UoY29tcFt2MVtpXS5zXSwgbmV4dGlbY29tcFt2MVtpXS5zXV0sIDEpOwogICAgICAgIHNlZzEuc2V0KGNvbXBbdjFbaV0uc10sIDEpOwoKICAgICAgICBhbnM9bWF4KGFucywgc2VnMS5tYXhpWzBdKTsKICAgIH0KICAgIGNvdXQ8PGFuczw8ZW5kbDsKfQoKaW50MzJfdCBtYWluKCkgewogICAgI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgICAgICByZWFkX2ZpbGU7CiAgICAjZW5kaWYKCiAgICBmYXN0OwogCiAgICBpbnQgdDsKICAgIHQ9MTsKICAgIC8vIGNpbj4+dDsKICAgIHdoaWxlKHQtLSl7CiAgICAgICAgc29sdmUoKTsKICAgIH0KICAgIHJldHVybiAwOwp9