#include <bits/stdc++.h>
using namespace std;

struct Data{
    int w, h;
};

int main(){
    int n, w, d;
    while(cin >> n >> w >> d, n||w||d){
        Data data[128];
        data[1] = (Data){w, d};
        int ptr = 2;
        for(int i = 0; i < n; i++){
            int p, s;
            cin >> p >> s;
            Data tmp = data[p];
            s %= tmp.w + tmp.h;

            for(int j = p; j < ptr - 1; j++){
                swap(data[j], data[j+1]);
            }

            if(s < tmp.w){
                int Pos = min(s, tmp.w - s);
                data[ptr++] = (Data){tmp.w - Pos, tmp.h};
                data[ptr - 2].w = Pos;
            }
            else{
                s -= tmp.w;
                int Pos = min(s, tmp.h - s);
                data[ptr++] = (Data){tmp.w, tmp.h - Pos};
                data[ptr - 2].h = Pos;
            }
        }
        vector<int> dat;
        for(int i = 1; i < ptr; i++){
            dat.push_back(data[i].w * data[i].h);
        }
        sort(dat.begin(), dat.end());
        bool first = false;
        for(int i = 0; i < dat.size(); i++){
            if(first++) printf(" ");
            printf("%d", dat[i]);
        }
        printf("\n");
    }
}
