#include<iostream>
#include<string>
#include<cctype>
#include<vector>
#include<algorithm>
using namespace std;
struct d {
int id;
int de;
int cai;
};
bool cmp(d a, d b) {
if ((a.de + a.cai)>(b.de + b.cai))
return true;
else if ((a.de + a.cai) == (b.de + b.cai)) {
if (a.de > b.de)
return true;
else if (a.de == b.de)
return a.id < b.id;
else
return false;
}
return false;
}
bool cmp2(d a, d b) {
return a.id<b.id;
}
vector<d> d1;
vector<d> d2;
vector<d> d3;
vector<d> d4;
int main() {
#ifdef LOCAL
freopen("d:\\datain.txt", "r", stdin);
//freopen("d:\\dataout.txt", "w", stdout);
#endif LOCAL
int n, l, h;
cin >> n >> l >> h;
for (int i = 0; i < n; i++) {
d t;
//cin >> t.id >> t.de >> t.cai;
scanf("%d%d%d", &t.id, &t.de, &t.cai);
if (t.de >= l&&t.cai >= l) {
if (t.de >= h && t.cai >= h) {
d1.push_back(t);
}
else if (t.de >= h && t.cai < h) {
d2.push_back(t);
}
else if (t.de < h&&t.cai < h&&t.de >= t.cai) {
d3.push_back(t);
}
else {
d4.push_back(t);
}
}
}
cout << d1.size() + d2.size() + d3.size() + d4.size() << endl;
vector<d>::iterator it;
sort(d1.begin(), d1.end(), cmp);
sort(d2.begin(), d2.end(), cmp);
sort(d3.begin(), d3.end(), cmp);
sort(d4.begin(), d4.end(), cmp);
it = d1.begin();
//for (int i = 0; i < d1.size(); i++) {
// cout << d1[i].id << endl;
//}
while (it != d1.end()) {
printf("%d %d %d\n", it->id, it->de, it->cai);
it++;
}
it = d2.begin();
while (it != d2.end()) {
printf("%d %d %d\n", it->id, it->de, it->cai);
it++;
}
it = d3.begin();
while (it != d3.end()) {
printf("%d %d %d\n", it->id, it->de, it->cai);
it++;
}
it = d4.begin();
while (it != d4.end()) {
printf("%d %d %d\n", it->id, it->de, it->cai);
it++;
}
}