#include <bits/stdc++.h>
using namespace std;
 
struct Data {
    int w, h;
};
 
 
int main()
{
    int n, w, d;
 
    while(scanf("%d %d %d", &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;
            scanf("%d %d", &p, &s);
            Data temp = data[p];
            s %= temp.w + temp.h;
             
            for(int j = p; j < ptr - 1; j++) {
                swap(data[j], data[j + 1]);
            }
 
            if(s < temp.w) { // ???????????°??£??¨??????
                int Pos = min(s, temp.w - s);
                data[ptr++] = (Data){temp.w - Pos, temp.h};
                data[ptr - 2].w = Pos;
            } else { // ?¨??????°
                s -= temp.w;
                int Pos = min(s, temp.h - s);
                data[ptr++] = (Data){temp.w, temp.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");
    }
}