#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define len(v) (int)(v).size()
#define show(x) cout << #x << " = " << x << "\n"

using namespace std;

const int MAX_N = 105;

int kind[MAX_N][MAX_N];

struct data
{
    int lx,ly,rx,ry;
    data(){}
    data(int a,int b,int c,int d) : lx(a), ly(b), rx(c), ry(d){}
};

int main()
{
    while(1){
        int n,w,h;
        cin >> n >> w >> h;
        if(n == 0 && w == 0 && h == 0){
            break;
        }
        vector<data> vec;
        vec.emplace_back(0,0,h,w);
        rep(i,h){
            rep(j,w){
                kind[i][j] = 0;
            }
        }
        rep(i,n){
            int p,s;
            cin >> p >> s;
            p--;
            data nw = vec[p];
            for(int j=p;j<len(vec)-1;j++){
                vec[j] = vec[j+1];
                for(int k=vec[j].lx;k<vec[j].rx;k++){
                    for(int l=vec[j].ly;l<vec[j].ry;l++){
                        kind[k][l] = j;
                    }
                }
            }
            int yoko = nw.ry-nw.ly;
            int tate = nw.rx-nw.lx;
            s %= 2*(yoko+tate);
            if(s < yoko){
                if(s <= yoko/2){
                    vec.back() = (data){nw.lx,nw.ly,nw.rx,nw.ly+s};
                    vec.emplace_back(nw.lx,nw.ly+s,nw.rx,nw.ry);
                    for(int j=nw.ly;j<s+nw.ly;j++){
                        for(int k=nw.lx;k<nw.rx;k++){
                            kind[k][j] = len(vec)-2;
                        }
                    }
                    for(int j=s+nw.ly;j<nw.ry;j++){
                        for(int k=nw.lx;k<nw.rx;k++){
                            kind[k][j] = len(vec)-1;
                        }
                    }
                }else{
                    vec.back() = (data){nw.lx,nw.ly+s,nw.rx,nw.ry};
                    vec.emplace_back(nw.lx,nw.ly,nw.rx,nw.ly+s);
                    for(int j=nw.ly;j<s+nw.ly;j++){
                        for(int k=nw.lx;k<nw.rx;k++){
                            kind[k][j] = len(vec)-1;
                        }
                    }
                    for(int j=s+nw.ly;j<nw.ry;j++){
                        for(int k=nw.lx;k<nw.rx;k++){
                            kind[k][j] = len(vec)-2;
                        }
                    }
                }
            }else if(s < tate+yoko){
                s -= yoko;
                if(s <= tate/2){
                    vec.back() = (data){nw.lx,nw.ly,nw.lx+s,nw.ry};
                    vec.emplace_back(nw.lx+s,nw.ly,nw.rx,nw.ry);
                    for(int j=nw.lx;j<nw.lx+s;j++){
                        for(int k=nw.ly;k<nw.ry;k++){
                            kind[j][k] = len(vec)-2;
                        }
                    }
                    for(int j=s+nw.lx;j<nw.rx;j++){
                        for(int k=nw.ly;k<nw.ly;k++){
                            kind[j][k] = len(vec)-1;
                        }
                    }
                }else{
                    vec.back() = (data){nw.lx+s,nw.ly,nw.rx,nw.ry};
                    vec.emplace_back(nw.lx,nw.ly,nw.lx+s,nw.ry);
                    for(int j=nw.lx;j<nw.lx+s;j++){
                        for(int k=nw.ly;k<nw.ry;k++){
                            kind[j][k] = len(vec)-1;
                        }
                    }
                    for(int j=s+nw.lx;j<nw.rx;j++){
                        for(int k=nw.ly;k<nw.ly;k++){
                            kind[j][k] = len(vec)-2;
                        }
                    }
                }
            }else if(s < tate+2*yoko){
                s -= tate+yoko;
                s = yoko-s;
                if(s <= yoko/2){
                    vec.back() = (data){nw.lx,nw.ly,nw.rx,nw.ly+s};
                    vec.emplace_back(nw.lx,nw.ly+s,nw.rx,nw.ry);
                    for(int j=nw.ly;j<s+nw.ly;j++){
                        for(int k=nw.lx;k<nw.rx;k++){
                            kind[k][j] = len(vec)-2;
                        }
                    }
                    for(int j=s+nw.ly;j<nw.ry;j++){
                        for(int k=nw.lx;k<nw.rx;k++){
                            kind[k][j] = len(vec)-1;
                        }
                    }
                }else{
                    vec.back() = (data){nw.lx,nw.ly+s,nw.rx,nw.ry};
                    vec.emplace_back(nw.lx,nw.ly,nw.rx,nw.ly+s);
                    for(int j=nw.ly;j<s+nw.ly;j++){
                        for(int k=nw.lx;k<nw.rx;k++){
                            kind[k][j] = len(vec)-1;
                        }
                    }
                    for(int j=s+nw.ly;j<nw.ry;j++){
                        for(int k=nw.lx;k<nw.rx;k++){
                            kind[k][j] = len(vec)-2;
                        }
                    }
                }
            }else{
                s -= 2*yoko+tate;
                s = tate-s;
                if(s <= tate/2){
                    vec.back() = (data){nw.lx,nw.ly,nw.lx+s,nw.ry};
                    vec.emplace_back(nw.lx+s,nw.ly,nw.rx,nw.ry);
                    for(int j=nw.lx;j<nw.lx+s;j++){
                        for(int k=nw.ly;k<nw.ry;k++){
                            kind[j][k] = len(vec)-2;
                        }
                    }
                    for(int j=s+nw.lx;j<nw.rx;j++){
                        for(int k=nw.ly;k<nw.ly;k++){
                            kind[j][k] = len(vec)-1;
                        }
                    }
                }else{
                    vec.back() = (data){nw.lx+s,nw.ly,nw.rx,nw.ry};
                    vec.emplace_back(nw.lx,nw.ly,nw.lx+s,nw.ry);
                    for(int j=nw.lx;j<nw.lx+s;j++){
                        for(int k=nw.ly;k<nw.ry;k++){
                            kind[j][k] = len(vec)-1;
                        }
                    }
                    for(int j=s+nw.lx;j<nw.rx;j++){
                        for(int k=nw.ly;k<nw.ly;k++){
                            kind[j][k] = len(vec)-2;
                        }
                    }
                }
            }
        }
        vector<int> ans(len(vec));
        rep(i,len(vec)){
            ans[i] = (vec[i].rx-vec[i].lx)*(vec[i].ry-vec[i].ly);
        }
        sort(ans.begin(),ans.end());
        rep(i,len(ans)-1){
            cout << ans[i] << " ";
        }
        cout << ans.back() << "\n";
    }
}



Measured memory_bytes: 3088