1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <cstdio>
#include <algorithm>
using namespace std;
int maksRezerwatu;
int n,x,y,buf,x1[500002],y1[500002],x2[500002],y2[500002];
int pole[5005][5005];
void checknext(int z){
    if(z == 0){
        int tempMax = 0;
        for(int i=0; i<=x; i++){
            for(int j=0; j<=y; j++){
                if(pole[i][j] == n)
                    tempMax++;
                //printf("%d",pole[i][j]);
            }
            //printf("\n");
        }
        //printf("pole:%d\n\n",tempMax);
        if( tempMax > maksRezerwatu)
            maksRezerwatu = tempMax;
        return;
    }
//mode 1
    for(int i=x1[z]; i<x2[z]; i++)
        for(int j=y1[z]; j<y2[z]; j++)
            pole[i][j] ++;

    checknext( z-1);

    for(int i=x1[z]; i<x2[z]; i++)
        for(int j=y1[z]; j<y2[z]; j++)
            pole[i][j] --;

//mode 2
    for(int i=x1[z]; i<x2[z]; i++)
        for(int j=0; j<y1[z]; j++)
            pole[i][j] ++;
    for(int i=x1[z]; i<x2[z]; i++)
        for(int j=y2[z]; j<y; j++)
            pole[i][j] ++;

    checknext( z-1);

    for(int i=x1[z]; i<x2[z]; i++)
        for(int j=0; j<y1[z]; j++)
            pole[i][j] --;
    for(int i=x1[z]; i<x2[z]; i++)
        for(int j=y2[z]; j<y; j++)
            pole[i][j] --;

//mode 3
    for(int i=0; i<x1[z]; i++)
        for(int j=y1[z]; j<y2[z]; j++)
            pole[i][j] ++;
    for(int i=x2[z]; i<x; i++)
        for(int j=y1[z]; j<y2[z]; j++)
            pole[i][j] ++;

    checknext( z-1);

    for(int i=0; i<x1[z]; i++)
        for(int j=y1[z]; j<y2[z]; j++)
            pole[i][j] --;
    for(int i=x2[z]; i<x; i++)
        for(int j=y1[z]; j<y2[z]; j++)
            pole[i][j] --;
//mode 4
    for(int i=0; i<x1[z]; i++)
        for(int j=0; j<y1[z]; j++)
            pole[i][j] ++;
    for(int i=x2[z]; i<x; i++)
        for(int j=y2[z]; j<y; j++)
            pole[i][j] ++;

    for(int i=0; i<x1[z]; i++)
        for(int j=y2[z]; j<y; j++)
            pole[i][j] ++;
    for(int i=x2[z]; i<x; i++)
        for(int j=0; j<y1[z]; j++)
            pole[i][j] ++;

    checknext( z-1);

    for(int i=0; i<x1[z]; i++)
        for(int j=0; j<y1[z]; j++)
            pole[i][j] --;
    for(int i=x2[z]; i<x; i++)
        for(int j=y2[z]; j<y; j++)
            pole[i][j] --;

    for(int i=0; i<x1[z]; i++)
        for(int j=y2[z]; j<y; j++)
            pole[i][j] --;
    for(int i=x2[z]; i<x; i++)
        for(int j=0; j<y1[z]; j++)
            pole[i][j] --;
    return;
}
int main() {
    //int pole[1000][1000];
    //int n,x,y,buf,x1[500002],y1[500002],x2[500002],y2[500002];
    scanf("%d %d %d",&n,&x,&y);
    for(int i=0; i<= x; i++)
        for(int j=0; j<=y; j++)
            pole[x][y]=0;
    for(int i=1; i<=n; i++){
        maksRezerwatu = 0;
        scanf("%d %d %d %d",&x1[i],&y1[i],&x2[i],&y2[i]);
        if(x1[i] > x2[i])
            swap( x1[i], x2[i]);
        if(y1[i] > y2[i])
            swap( y1[i], y2[i]);
    }
    checknext(n);
    printf("%d\n",maksRezerwatu);
    return 0;
}