#include<bits/stdc++.h>
using namespace std;
bool comp(pair<int,pair<int,int> > a,pair<int,pair<int,int> > b){
if(a.second.first<b.second.first) return true;
else if(a.second.first==b.second.first){
if(a.second.second<=b.second.second) return true;
else return false;
}
return false;
}
/*
vector<pair<int,pair<int,int> > > LIS(vector<pair<int,pair<int,int> > > envp){
vector< vector<pair<int,pair<int,int> > > > L(envp.size());
L[0].push_back(envp[0]);
for (int i = 1; i < envp.size(); i++)
{
for (int j = 0; j < i; j++)
{
if ((envp[i].second.first > envp[j].second.first && envp[i].second.second > envp[j].second.second) &&
(L[i].size() < L[j].size() + 1))
L[i] = L[j];
}
L[i].push_back(envp[i]);
}
vector<pair<int,pair<int,int> > > ma = L[0];
// LIS will be max of all increasing sub-
// sequences of arr
for (vector<pair<int,pair<int,int> > > x : L)
if (x.size() > ma.size())
ma = x;
return ma;
}
*/
// Binary search
int GetCeilIndex(vector<pair<int,pair<int,int> > > envp, vector<int>& T, int l, int r,
pair<int,pair<int,int> > key)
{
while (r - l > 1) {
int m = l + (r - l) / 2;
if ((envp[T[m]].second.first > key.second.first && envp[T[m]].second.second > key.second.second))
r = m;
else
l = m;
}
return r;
}
vector<pair<int,pair<int,int> > > LIS(vector<pair<int,pair<int,int> > > envp)
{
// Add boundary case, when array n is zero
// Depend on smart pointers
vector<int> tailIndices(envp.size(), 0); // Initialized with 0
vector<int> prevIndices(envp.size(), -1); // initialized with -1
int len = 1; // it will always point to empty location
for (int i = 1; i < envp.size(); i++) {
if (envp[i].second.first < envp[tailIndices[0]].second.first && envp[i].second.second < envp[tailIndices[0]].second.second) {
// new largest value
tailIndices[0] = i;
}
else if (envp[i].second.first > envp[tailIndices[len-1]].second.first && envp[i].second.second > envp[tailIndices[len-1]].second.second) {
// arr[i] wants to extend largest subsequence
prevIndices[i] = tailIndices[len - 1];
tailIndices[len++] = i;
}
else {
// arr[i] wants to be a potential condidate of
// future subsequence
// It will replace ceil value in tailIndices
int pos = GetCeilIndex(envp, tailIndices, -1,
len - 1, envp[i]);
prevIndices[i] = tailIndices[pos - 1];
tailIndices[pos] = i;
}
}
//cout << "LIS of given input" << endl;
vector<pair<int,pair<int,int> > > out;
for (int i = tailIndices[len - 1]; i >= 0; i = prevIndices[i])
out.push_back(envp[i]);
//cout << endl;
return out;
}
int main(){
int n,wl,hl;
cin>>n>>wl>>hl;
vector<pair<int,pair<int,int> > > envp;
int wi,hi;
for(int i=0;i<n;i++){
cin>>wi>>hi;
if(wi>wl && hi>hl) envp.push_back(make_pair(i+1,make_pair(wi,hi)));
}
if(envp.size()<1) {
cout<<"0"<<endl;
return 0;
}
sort(envp.begin(),envp.end(),comp);
/*for (pair<int,pair<int,int> > x : envp)
printf("(%d(%d,%d))\n",x.first,x.second.first,x.second.second);
*/
vector<pair<int,pair<int,int> > > ma;
ma=LIS(envp);
cout<<ma.size()<<endl;
for (int i=ma.size()-1;i>=0;i--)
cout<<ma[i].first<<" ";
//cout<<endl;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmJvb2wgY29tcChwYWlyPGludCxwYWlyPGludCxpbnQ+ID4gYSxwYWlyPGludCxwYWlyPGludCxpbnQ+ID4gYil7CiAgICBpZihhLnNlY29uZC5maXJzdDxiLnNlY29uZC5maXJzdCkgcmV0dXJuIHRydWU7CiAgICBlbHNlIGlmKGEuc2Vjb25kLmZpcnN0PT1iLnNlY29uZC5maXJzdCl7CiAgICAgICAgaWYoYS5zZWNvbmQuc2Vjb25kPD1iLnNlY29uZC5zZWNvbmQpIHJldHVybiB0cnVlOwogICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9Ci8qCnZlY3RvcjxwYWlyPGludCxwYWlyPGludCxpbnQ+ID4gPiBMSVModmVjdG9yPHBhaXI8aW50LHBhaXI8aW50LGludD4gPiA+IGVudnApewogICB2ZWN0b3I8IHZlY3RvcjxwYWlyPGludCxwYWlyPGludCxpbnQ+ID4gPiA+IEwoZW52cC5zaXplKCkpOwogICAgTFswXS5wdXNoX2JhY2soZW52cFswXSk7IAogIAogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBlbnZwLnNpemUoKTsgaSsrKSAKICAgIHsgCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspIAogICAgICAgIHsgCiAgICAgICAgICAgIGlmICgoZW52cFtpXS5zZWNvbmQuZmlyc3QgPiBlbnZwW2pdLnNlY29uZC5maXJzdCAmJiBlbnZwW2ldLnNlY29uZC5zZWNvbmQgPiBlbnZwW2pdLnNlY29uZC5zZWNvbmQpICYmIAogICAgICAgICAgICAgICAgICAgIChMW2ldLnNpemUoKSA8IExbal0uc2l6ZSgpICsgMSkpIAogICAgICAgICAgICAgICAgTFtpXSA9IExbal07IAogICAgICAgIH0gCiAgICAgICAgTFtpXS5wdXNoX2JhY2soZW52cFtpXSk7IAogICAgfSAKCiAgICB2ZWN0b3I8cGFpcjxpbnQscGFpcjxpbnQsaW50PiA+ID4gbWEgPSBMWzBdOyAKICAKICAgIC8vIExJUyB3aWxsIGJlIG1heCBvZiBhbGwgaW5jcmVhc2luZyBzdWItIAogICAgLy8gc2VxdWVuY2VzIG9mIGFyciAKICAgIGZvciAodmVjdG9yPHBhaXI8aW50LHBhaXI8aW50LGludD4gPiA+IHggOiBMKSAKICAgICAgICBpZiAoeC5zaXplKCkgPiBtYS5zaXplKCkpIAogICAgICAgICAgICBtYSA9IHg7IAogIAogICAgcmV0dXJuIG1hOwp9CiovCi8vIEJpbmFyeSBzZWFyY2ggCmludCBHZXRDZWlsSW5kZXgodmVjdG9yPHBhaXI8aW50LHBhaXI8aW50LGludD4gPiA+IGVudnAsIHZlY3RvcjxpbnQ+JiBULCBpbnQgbCwgaW50IHIsIAogICAgICAgICAgICAgICAgIHBhaXI8aW50LHBhaXI8aW50LGludD4gPiBrZXkpIAp7IAogICAgd2hpbGUgKHIgLSBsID4gMSkgeyAKICAgICAgICBpbnQgbSA9IGwgKyAociAtIGwpIC8gMjsgCiAgICAgICAgaWYgKChlbnZwW1RbbV1dLnNlY29uZC5maXJzdCA+IGtleS5zZWNvbmQuZmlyc3QgJiYgZW52cFtUW21dXS5zZWNvbmQuc2Vjb25kID4ga2V5LnNlY29uZC5zZWNvbmQpKSAKICAgICAgICAgICAgciA9IG07IAogICAgICAgIGVsc2UKICAgICAgICAgICAgbCA9IG07IAogICAgfSAKICAKICAgIHJldHVybiByOyAKfSAKICAKdmVjdG9yPHBhaXI8aW50LHBhaXI8aW50LGludD4gPiA+IExJUyh2ZWN0b3I8cGFpcjxpbnQscGFpcjxpbnQsaW50PiA+ID4gZW52cCkgCnsgCiAgICAvLyBBZGQgYm91bmRhcnkgY2FzZSwgd2hlbiBhcnJheSBuIGlzIHplcm8gCiAgICAvLyBEZXBlbmQgb24gc21hcnQgcG9pbnRlcnMgCiAgCiAgICB2ZWN0b3I8aW50PiB0YWlsSW5kaWNlcyhlbnZwLnNpemUoKSwgMCk7IC8vIEluaXRpYWxpemVkIHdpdGggMCAKICAgIHZlY3RvcjxpbnQ+IHByZXZJbmRpY2VzKGVudnAuc2l6ZSgpLCAtMSk7IC8vIGluaXRpYWxpemVkIHdpdGggLTEgCiAgCiAgICBpbnQgbGVuID0gMTsgLy8gaXQgd2lsbCBhbHdheXMgcG9pbnQgdG8gZW1wdHkgbG9jYXRpb24gCiAgICBmb3IgKGludCBpID0gMTsgaSA8IGVudnAuc2l6ZSgpOyBpKyspIHsgCiAgICAgICAgaWYgKGVudnBbaV0uc2Vjb25kLmZpcnN0IDwgZW52cFt0YWlsSW5kaWNlc1swXV0uc2Vjb25kLmZpcnN0ICYmIGVudnBbaV0uc2Vjb25kLnNlY29uZCA8IGVudnBbdGFpbEluZGljZXNbMF1dLnNlY29uZC5zZWNvbmQpIHsgCiAgICAgICAgICAgIC8vIG5ldyBsYXJnZXN0IHZhbHVlIAogICAgICAgICAgICB0YWlsSW5kaWNlc1swXSA9IGk7IAogICAgICAgIH0gCiAgICAgICAgZWxzZSBpZiAoZW52cFtpXS5zZWNvbmQuZmlyc3QgPiBlbnZwW3RhaWxJbmRpY2VzW2xlbi0xXV0uc2Vjb25kLmZpcnN0ICYmIGVudnBbaV0uc2Vjb25kLnNlY29uZCA+IGVudnBbdGFpbEluZGljZXNbbGVuLTFdXS5zZWNvbmQuc2Vjb25kKSB7IAogICAgICAgICAgICAvLyBhcnJbaV0gd2FudHMgdG8gZXh0ZW5kIGxhcmdlc3Qgc3Vic2VxdWVuY2UgCiAgICAgICAgICAgIHByZXZJbmRpY2VzW2ldID0gdGFpbEluZGljZXNbbGVuIC0gMV07IAogICAgICAgICAgICB0YWlsSW5kaWNlc1tsZW4rK10gPSBpOyAKICAgICAgICB9IAogICAgICAgIGVsc2UgeyAKICAgICAgICAgICAgLy8gYXJyW2ldIHdhbnRzIHRvIGJlIGEgcG90ZW50aWFsIGNvbmRpZGF0ZSBvZiAKICAgICAgICAgICAgLy8gZnV0dXJlIHN1YnNlcXVlbmNlIAogICAgICAgICAgICAvLyBJdCB3aWxsIHJlcGxhY2UgY2VpbCB2YWx1ZSBpbiB0YWlsSW5kaWNlcyAKICAgICAgICAgICAgaW50IHBvcyA9IEdldENlaWxJbmRleChlbnZwLCB0YWlsSW5kaWNlcywgLTEsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtIDEsIGVudnBbaV0pOyAKICAKICAgICAgICAgICAgcHJldkluZGljZXNbaV0gPSB0YWlsSW5kaWNlc1twb3MgLSAxXTsgCiAgICAgICAgICAgIHRhaWxJbmRpY2VzW3Bvc10gPSBpOyAKICAgICAgICB9IAogICAgfSAKICAKICAgIC8vY291dCA8PCAiTElTIG9mIGdpdmVuIGlucHV0IiA8PCBlbmRsOwogICAgdmVjdG9yPHBhaXI8aW50LHBhaXI8aW50LGludD4gPiA+IG91dDsKICAgIAogICAgZm9yIChpbnQgaSA9IHRhaWxJbmRpY2VzW2xlbiAtIDFdOyBpID49IDA7IGkgPSBwcmV2SW5kaWNlc1tpXSkgCiAgICAgICAgb3V0LnB1c2hfYmFjayhlbnZwW2ldKTsKICAgIC8vY291dCA8PCBlbmRsOyAKICAKICAgIHJldHVybiBvdXQ7IAp9CgppbnQgbWFpbigpewogICAgaW50IG4sd2wsaGw7CiAgICBjaW4+Pm4+PndsPj5obDsKCiAgICB2ZWN0b3I8cGFpcjxpbnQscGFpcjxpbnQsaW50PiA+ID4gZW52cDsKICAgIGludCB3aSxoaTsKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspewogICAgICAgIGNpbj4+d2k+PmhpOwogICAgICAgIGlmKHdpPndsICYmIGhpPmhsKSBlbnZwLnB1c2hfYmFjayhtYWtlX3BhaXIoaSsxLG1ha2VfcGFpcih3aSxoaSkpKTsKICAgIH0KICAgIGlmKGVudnAuc2l6ZSgpPDEpIHsKICAgIAljb3V0PDwiMCI8PGVuZGw7CiAgICAJcmV0dXJuIDA7CiAgICB9CiAgICBzb3J0KGVudnAuYmVnaW4oKSxlbnZwLmVuZCgpLGNvbXApOwoKCS8qZm9yIChwYWlyPGludCxwYWlyPGludCxpbnQ+ID4geCA6IGVudnApIAogICAgICAgIHByaW50ZigiKCVkKCVkLCVkKSlcbiIseC5maXJzdCx4LnNlY29uZC5maXJzdCx4LnNlY29uZC5zZWNvbmQpOwogICAgKi8KICAgIHZlY3RvcjxwYWlyPGludCxwYWlyPGludCxpbnQ+ID4gPiBtYTsKIAogICAgbWE9TElTKGVudnApOwoJY291dDw8bWEuc2l6ZSgpPDxlbmRsOwogICAgZm9yIChpbnQgaT1tYS5zaXplKCktMTtpPj0wO2ktLSkgCiAgICAgICAgY291dDw8bWFbaV0uZmlyc3Q8PCIgIjsKICAgIC8vY291dDw8ZW5kbDsKCQogICAgcmV0dXJuIDA7Cn0=