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

using ll = long long;
#define REP(i,n) for(int i=0; i < (n); ++i)
#define REPR(i,n) for(int i=(n); i >= 0; --i)
#define FOR(i, m, n) for(int i = (m); i < (n); ++i)
#define INF 1e9
// constexpr ll INF = 1LL << 60;
int getS(pair<int, int> p){
  return p.first * p.second;
}
bool cmp(pair<int, int> l, pair<int, int> r){
  return getS(l) < getS(r);
}
void solve(int N, int W, int D){
  vector<pair<int, int>> pieces(1, {W, D});
  REP(i, N){
    int p, s;
    cin >> p >> s;
    p--;
    int w, d;
    tie(w, d) = pieces[p];
    pieces.erase(pieces.begin()+p);
    pair<int, int> add1, add2;
    s %= 2*w+2*d;
    if(s < w){
      add1 = {s, d};
      add2 = {w-s, d};
    }
    else if(s < w+d){
      s-=w;
      add1 = {w, s};
      add2 = {w, d-s};
    }
    else if(s < 2*w+d){
      s -= w+d;
      add1 = {s, d};
      add2 = {w-s, d};
    }
    else{
      s-= 2*w+d;
      add1 = {w, s};
      add2 = {w, d-s};
    }
    if(getS(add1) > getS(add2)){
      swap(add1, add2);
    }
    pieces.push_back(add1);
    pieces.push_back(add2);
  }
  sort(pieces.begin(), pieces.end(), &cmp);
  REP(i, N+1){
    cout << getS(pieces[i]) << (i!= N ? " " : "\n");
  }
}

int main(){
  while(true){
    int n, w, d;
    cin >> n >> w >> d;
    if(n==0 && w==0 && d==0) break;
    solve(n, w, d);
  }
  return 0;
}


