// Warning: very old code.
#include <fstream>
#include <algorithm>
#include <vector>
#define VALMAX 100005
using namespace std;
struct node {
int left, right;
int lazy, maxima;
node( int _left = 0 , int _right = 0 , int _lazy = 0 , int _maxima = 0 ) :
left( _left) , right( _right) , lazy( _lazy) , maxima( _maxima) { }
inline void make_lazy( int value) {
maxima + = value;
lazy + = value;
}
} arb[ VALMAX * 4 ] ;
void build( int left, int right, int pos) {
arb[ pos] .left = left, arb[ pos] .right = right;
arb[ pos] .lazy = arb[ pos] .maxima = 0 ;
if ( left == right)
return ;
const int mijl = ( left + right) / 2 ;
build( left, mijl, 2 * pos) ;
build( mijl + 1 , right, 2 * pos + 1 ) ;
}
void update( int left, int right, int value, int pos) {
if ( arb[ pos] .left == left && arb[ pos] .right == right) {
arb[ pos] .make_lazy ( value) ;
return ;
}
const int mijl = ( arb[ pos] .left + arb[ pos] .right ) / 2 ;
if ( right <= mijl)
update( left, right, value, 2 * pos) ;
else if ( left > mijl)
update( left, right, value, 2 * pos + 1 ) ;
else {
update( left, mijl, value, 2 * pos) ;
update( mijl + 1 , right, value, 2 * pos + 1 ) ;
}
arb[ pos] .maxima = max( arb[ 2 * pos] .maxima , arb[ 2 * pos + 1 ] .maxima ) + arb[ pos] .lazy ;
}
struct point {
int x, y;
point( int _x = 0 , int _y = 0 ) : x( _x) , y( _y) { }
} points[ VALMAX + 5 ] ;
struct event {
int type; // 1 = insert, -1 = erase
int which;
event( int _type = 0 , int _which = 0 ) : type( _type) , which( _which) { }
} ;
vector < event> events[ VALMAX + 5 ] ;
int sweep_maxima_OY_asc[ VALMAX + 5 ] ;
int sweep_maxima_OY_desc[ VALMAX + 5 ] ;
int sweep_maxima_OX_asc[ VALMAX + 5 ] ;
int sweep_maxima_OX_desc[ VALMAX + 5 ] ;
int dx, dy, n;
inline void do_sweeping ( int * sweep_maxima_OY_asc, int * sweep_maxima_OY_desc) {
build( 0 , VALMAX, 1 ) ;
for ( int i = 1 ; i <= n; i++ ) {
events[ points[ i] .x ] .push_back ( event( 1 , i) ) ;
if ( points[ i] .x + dx <= VALMAX)
events[ points[ i] .x + dx] .push_back ( event( - 1 , i) ) ;
}
vector < event> :: iterator it;
for ( int i = 0 ; i <= VALMAX; i++ ) {
if ( i)
sweep_maxima_OY_asc[ i] = sweep_maxima_OY_asc[ i - 1 ] ;
for ( it = events[ i] .begin ( ) ; it ! = events[ i] .end ( ) ; it++ )
if ( it - > type == 1 ) {
update( points[ it - > which] .y , min( points[ it - > which] .y + dy, VALMAX) , it - > type, 1 ) ;
sweep_maxima_OY_asc[ i] = max( sweep_maxima_OY_asc[ i] , arb[ 1 ] .maxima ) ;
}
for ( it = events[ i] .begin ( ) ; it ! = events[ i] .end ( ) ; it++ )
if ( it - > type == - 1 ) {
update( points[ it - > which] .y , min( points[ it - > which] .y + dy, VALMAX) , it - > type, 1 ) ;
sweep_maxima_OY_asc[ i] = max( sweep_maxima_OY_asc[ i] , arb[ 1 ] .maxima ) ;
}
events[ i] .clear ( ) ;
}
//Baleere descendenta
build( 0 , VALMAX, 1 ) ;
for ( int i = 1 ; i <= n; i++ ) {
events[ points[ i] .x ] .push_back ( event( 1 , i) ) ;
if ( points[ i] .x - dx >= 0 )
events[ points[ i] .x - dx] .push_back ( event( - 1 , i) ) ;
}
for ( int i = VALMAX; i >= 0 ; i-- ) {
sweep_maxima_OY_desc[ i] = sweep_maxima_OY_desc[ i + 1 ] ;
for ( it = events[ i] .begin ( ) ; it ! = events[ i] .end ( ) ; it++ )
if ( it - > type == 1 ) {
update( points[ it - > which] .y , min( points[ it - > which] .y + dy, VALMAX) , it - > type, 1 ) ;
sweep_maxima_OY_desc[ i] = max( sweep_maxima_OY_desc[ i] , arb[ 1 ] .maxima ) ;
}
for ( it = events[ i] .begin ( ) ; it ! = events[ i] .end ( ) ; it++ )
if ( it - > type == - 1 ) {
update( points[ it - > which] .y , min( points[ it - > which] .y + dy, VALMAX) , it - > type, 1 ) ;
sweep_maxima_OY_desc[ i] = max( sweep_maxima_OY_desc[ i] , arb[ 1 ] .maxima ) ;
}
events[ i] .clear ( ) ;
}
}
inline void invert ( ) {
for ( int i = 1 ; i <= n; i++ )
swap( points[ i] .x , points[ i] .y ) ;
swap( dx, dy) ;
}
int main( )
{
ifstream cin ( "parcele.in" ) ;
ofstream cout ( "parcele.out" ) ;
cin >> dx >> dy >> n;
for ( int i = 1 ; i <= n; i++ )
cin >> points[ i] .x >> points[ i] .y ;
do_sweeping( sweep_maxima_OY_asc, sweep_maxima_OY_desc) ;
invert( ) ;
do_sweeping( sweep_maxima_OX_asc, sweep_maxima_OX_desc) ;
int maxima = 0 ;
for ( int i = 0 ; i < VALMAX; i++ ) {
maxima = max( maxima, sweep_maxima_OY_asc[ i] + sweep_maxima_OY_desc[ i + 1 ] ) ;
maxima = max( maxima, sweep_maxima_OX_asc[ i] + sweep_maxima_OX_desc[ i + 1 ] ) ;
}
cout << maxima << '\n ' ;
cin .close ( ) ;
cout .close ( ) ;
return 0 ;
}
Ly8gV2FybmluZzogdmVyeSBvbGQgY29kZS4KI2luY2x1ZGUgPGZzdHJlYW0+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDx2ZWN0b3I+CiAKI2RlZmluZSBWQUxNQVggMTAwMDA1CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKc3RydWN0IG5vZGUgewogICAgaW50IGxlZnQsIHJpZ2h0OwogICAgaW50IGxhenksIG1heGltYTsKICAgIG5vZGUoaW50IF9sZWZ0ID0gMCwgaW50IF9yaWdodCA9IDAsIGludCBfbGF6eSA9IDAsIGludCBfbWF4aW1hID0gMCkgOgogICAgICBsZWZ0KF9sZWZ0KSwgcmlnaHQoX3JpZ2h0KSwgbGF6eShfbGF6eSksIG1heGltYShfbWF4aW1hKSB7fQogICAgaW5saW5lIHZvaWQgbWFrZV9sYXp5KGludCB2YWx1ZSkgewogICAgICAgIG1heGltYSArPSB2YWx1ZTsKICAgICAgICBsYXp5ICs9IHZhbHVlOwogICAgfQp9IGFyYltWQUxNQVggKiA0XTsKIAp2b2lkIGJ1aWxkKGludCBsZWZ0LCBpbnQgcmlnaHQsIGludCBwb3MpIHsKICAgIGFyYltwb3NdLmxlZnQgPSBsZWZ0LCBhcmJbcG9zXS5yaWdodCA9IHJpZ2h0OwogICAgYXJiW3Bvc10ubGF6eSA9IGFyYltwb3NdLm1heGltYSA9IDA7CiAgICBpZiAobGVmdCA9PSByaWdodCkKICAgICAgICByZXR1cm4gOwogICAgY29uc3QgaW50IG1pamwgPSAobGVmdCArIHJpZ2h0KSAvIDI7CiAgICBidWlsZChsZWZ0LCBtaWpsLCAyICogcG9zKTsKICAgIGJ1aWxkKG1pamwgKyAxLCByaWdodCwgMiAqIHBvcyArIDEpOwp9CiAKdm9pZCB1cGRhdGUoaW50IGxlZnQsIGludCByaWdodCwgaW50IHZhbHVlLCBpbnQgcG9zKSB7CiAgICBpZiAoYXJiW3Bvc10ubGVmdCA9PSBsZWZ0ICYmIGFyYltwb3NdLnJpZ2h0ID09IHJpZ2h0KSB7CiAgICAgICAgYXJiW3Bvc10ubWFrZV9sYXp5KHZhbHVlKTsKICAgICAgICByZXR1cm4gOwogICAgfQogICAgY29uc3QgaW50IG1pamwgPSAoYXJiW3Bvc10ubGVmdCArIGFyYltwb3NdLnJpZ2h0KSAvIDI7CiAgICBpZiAocmlnaHQgPD0gbWlqbCkKICAgICAgICB1cGRhdGUobGVmdCwgcmlnaHQsIHZhbHVlLCAyICogcG9zKTsKICAgIGVsc2UgaWYgKGxlZnQgPiBtaWpsKQogICAgICAgIHVwZGF0ZShsZWZ0LCByaWdodCwgdmFsdWUsIDIgKiBwb3MgKyAxKTsKICAgIGVsc2UgewogICAgICAgIHVwZGF0ZShsZWZ0LCBtaWpsLCB2YWx1ZSwgMiAqIHBvcyk7CiAgICAgICAgdXBkYXRlKG1pamwgKyAxLCByaWdodCwgdmFsdWUsIDIgKiBwb3MgKyAxKTsKICAgIH0KICAgIGFyYltwb3NdLm1heGltYSA9IG1heChhcmJbMiAqIHBvc10ubWF4aW1hLCBhcmJbMiAqIHBvcyArIDFdLm1heGltYSkgKyBhcmJbcG9zXS5sYXp5Owp9CiAKc3RydWN0IHBvaW50IHsKICAgIGludCB4LCB5OwogICAgcG9pbnQoaW50IF94ID0gMCwgaW50IF95ID0gMCk6IHgoX3gpLCB5KF95KSB7fQp9IHBvaW50c1tWQUxNQVggKyA1XTsKIApzdHJ1Y3QgZXZlbnQgewogICAgaW50IHR5cGU7IC8vIDEgPSBpbnNlcnQsIC0xID0gZXJhc2UKICAgIGludCB3aGljaDsKICAgIGV2ZW50KGludCBfdHlwZSA9IDAsIGludCBfd2hpY2ggPSAwKTogdHlwZShfdHlwZSksIHdoaWNoKF93aGljaCkge30KfTsKIAp2ZWN0b3IgPGV2ZW50PiBldmVudHNbVkFMTUFYICsgNV07CiAKaW50IHN3ZWVwX21heGltYV9PWV9hc2NbVkFMTUFYICsgNV07CmludCBzd2VlcF9tYXhpbWFfT1lfZGVzY1tWQUxNQVggKyA1XTsKaW50IHN3ZWVwX21heGltYV9PWF9hc2NbVkFMTUFYICsgNV07CmludCBzd2VlcF9tYXhpbWFfT1hfZGVzY1tWQUxNQVggKyA1XTsKIAppbnQgZHgsIGR5LCBuOwppbmxpbmUgdm9pZCBkb19zd2VlcGluZyAoaW50ICpzd2VlcF9tYXhpbWFfT1lfYXNjLCBpbnQgKnN3ZWVwX21heGltYV9PWV9kZXNjKSB7CiAgICBidWlsZCgwLCBWQUxNQVgsIDEpOwogCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBldmVudHNbcG9pbnRzW2ldLnhdLnB1c2hfYmFjayhldmVudCgxLCBpKSk7CiAKICAgICAgICBpZiAocG9pbnRzW2ldLnggKyBkeCA8PSBWQUxNQVgpCiAgICAgICAgICAgIGV2ZW50c1twb2ludHNbaV0ueCArIGR4XS5wdXNoX2JhY2soZXZlbnQoLTEsIGkpKTsKICAgIH0KIAogICAgdmVjdG9yIDxldmVudD4gOjogaXRlcmF0b3IgaXQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8PSBWQUxNQVg7IGkrKykgewogICAgICAgIGlmIChpKQogICAgICAgICAgICBzd2VlcF9tYXhpbWFfT1lfYXNjW2ldID0gc3dlZXBfbWF4aW1hX09ZX2FzY1tpIC0gMV07CiAgICAgICAgZm9yIChpdCA9IGV2ZW50c1tpXS5iZWdpbigpOyBpdCAhPSBldmVudHNbaV0uZW5kKCk7IGl0KyspCiAgICAgICAgICAgIGlmIChpdCAtPiB0eXBlID09IDEpIHsKICAgICAgICAgICAgICAgIHVwZGF0ZShwb2ludHNbaXQgLT4gd2hpY2hdLnksIG1pbihwb2ludHNbaXQgLT4gd2hpY2hdLnkgKyBkeSwgVkFMTUFYKSwgaXQgLT4gdHlwZSwgMSk7CiAgICAgICAgICAgICAgICBzd2VlcF9tYXhpbWFfT1lfYXNjW2ldID0gbWF4KHN3ZWVwX21heGltYV9PWV9hc2NbaV0sIGFyYlsxXS5tYXhpbWEpOwogICAgICAgICAgICB9CiAgICAgICAgZm9yIChpdCA9IGV2ZW50c1tpXS5iZWdpbigpOyBpdCAhPSBldmVudHNbaV0uZW5kKCk7IGl0KyspCiAgICAgICAgICAgIGlmIChpdCAtPiB0eXBlID09IC0xKSB7CiAgICAgICAgICAgICAgICB1cGRhdGUocG9pbnRzW2l0IC0+IHdoaWNoXS55LCBtaW4ocG9pbnRzW2l0IC0+IHdoaWNoXS55ICsgZHksIFZBTE1BWCksIGl0IC0+IHR5cGUsIDEpOwogICAgICAgICAgICAgICAgc3dlZXBfbWF4aW1hX09ZX2FzY1tpXSA9IG1heChzd2VlcF9tYXhpbWFfT1lfYXNjW2ldLCBhcmJbMV0ubWF4aW1hKTsKICAgICAgICAgICAgfQogICAgICAgIGV2ZW50c1tpXS5jbGVhcigpOwogICAgfQogCiAgICAvL0JhbGVlcmUgZGVzY2VuZGVudGEKICAgIGJ1aWxkKDAsIFZBTE1BWCwgMSk7CiAKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGV2ZW50c1twb2ludHNbaV0ueF0ucHVzaF9iYWNrKGV2ZW50KDEsIGkpKTsKICAgICAgICBpZiAocG9pbnRzW2ldLnggLSBkeCA+PSAwKQogICAgICAgICAgICBldmVudHNbcG9pbnRzW2ldLnggLSBkeF0ucHVzaF9iYWNrKGV2ZW50KC0xLCBpKSk7CiAgICB9CiAKICAgIGZvciAoaW50IGkgPSBWQUxNQVg7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgc3dlZXBfbWF4aW1hX09ZX2Rlc2NbaV0gPSBzd2VlcF9tYXhpbWFfT1lfZGVzY1tpICsgMV07CiAgICAgICAgZm9yIChpdCA9IGV2ZW50c1tpXS5iZWdpbigpOyBpdCAhPSBldmVudHNbaV0uZW5kKCk7IGl0KyspCiAgICAgICAgICAgIGlmIChpdCAtPiB0eXBlID09IDEpIHsKICAgICAgICAgICAgICAgIHVwZGF0ZShwb2ludHNbaXQgLT4gd2hpY2hdLnksIG1pbihwb2ludHNbaXQgLT4gd2hpY2hdLnkgKyBkeSwgVkFMTUFYKSwgaXQgLT4gdHlwZSwgMSk7CiAgICAgICAgICAgICAgICBzd2VlcF9tYXhpbWFfT1lfZGVzY1tpXSA9IG1heChzd2VlcF9tYXhpbWFfT1lfZGVzY1tpXSwgYXJiWzFdLm1heGltYSk7CiAgICAgICAgICAgIH0KICAgICAgICBmb3IgKGl0ID0gZXZlbnRzW2ldLmJlZ2luKCk7IGl0ICE9IGV2ZW50c1tpXS5lbmQoKTsgaXQrKykKICAgICAgICAgICAgaWYgKGl0IC0+IHR5cGUgPT0gLTEpIHsKICAgICAgICAgICAgICAgIHVwZGF0ZShwb2ludHNbaXQgLT4gd2hpY2hdLnksIG1pbihwb2ludHNbaXQgLT4gd2hpY2hdLnkgKyBkeSwgVkFMTUFYKSwgaXQgLT4gdHlwZSwgMSk7CiAgICAgICAgICAgICAgICBzd2VlcF9tYXhpbWFfT1lfZGVzY1tpXSA9IG1heChzd2VlcF9tYXhpbWFfT1lfZGVzY1tpXSwgYXJiWzFdLm1heGltYSk7CiAgICAgICAgICAgIH0KICAgICAgICBldmVudHNbaV0uY2xlYXIoKTsKICAgIH0KfQogCmlubGluZSB2b2lkIGludmVydCAoKSB7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgc3dhcChwb2ludHNbaV0ueCwgcG9pbnRzW2ldLnkpOwogICAgc3dhcChkeCwgZHkpOwp9CiAKaW50IG1haW4oKQp7CiAgICBpZnN0cmVhbSBjaW4oInBhcmNlbGUuaW4iKTsKICAgIG9mc3RyZWFtIGNvdXQoInBhcmNlbGUub3V0Iik7CiAKICAgIGNpbiA+PiBkeCA+PiBkeSA+PiBuOwogCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgY2luID4+IHBvaW50c1tpXS54ID4+IHBvaW50c1tpXS55OwogCiAgICBkb19zd2VlcGluZyhzd2VlcF9tYXhpbWFfT1lfYXNjLCBzd2VlcF9tYXhpbWFfT1lfZGVzYyk7CiAgICBpbnZlcnQoKTsKICAgIGRvX3N3ZWVwaW5nKHN3ZWVwX21heGltYV9PWF9hc2MsIHN3ZWVwX21heGltYV9PWF9kZXNjKTsKIAogICAgaW50IG1heGltYSA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IFZBTE1BWDsgaSsrKSB7CiAgICAgICAgbWF4aW1hID0gbWF4KG1heGltYSwgc3dlZXBfbWF4aW1hX09ZX2FzY1tpXSArIHN3ZWVwX21heGltYV9PWV9kZXNjW2kgKyAxXSk7CiAgICAgICAgbWF4aW1hID0gbWF4KG1heGltYSwgc3dlZXBfbWF4aW1hX09YX2FzY1tpXSArIHN3ZWVwX21heGltYV9PWF9kZXNjW2kgKyAxXSk7CiAgICB9CiAKICAgIGNvdXQgPDwgbWF4aW1hIDw8ICdcbic7CiAKICAgIGNpbi5jbG9zZSgpOwogICAgY291dC5jbG9zZSgpOwogICAgcmV0dXJuIDA7Cn0=