#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

// 入力
string f[10];
int n, w[10], s[10]; 
// used[i] := i番目を選んだかどうか
bool used[10];
// 今まで見つかった中で一番重心が低いもの
double ans_g;
// 解
vector<int> ans;

// 重さに耐えられるかチェック
bool check(vector<int>& v){
	for(int i=0 ; i < v.size() ; i++ ){
		int weight = 0;
		for(int j=i+1 ; j < v.size() ; j++ ){
			weight += w[v[j]];
		}
		if( s[v[i]] < weight )
			return false;
	}
	return true;
}

// 重心を計算
double gravity(vector<int>& v){
	double a = 0, b = 0;
	for(int i=0 ; i < v.size() ; i++ ){
		a += (i+1) * w[v[i]];
		b += w[v[i]];
	}
	return a / b;
}

// 順列生成して解を探す (最大で 10! 通り)
void solve(){
	vector<int> v(n);
	for(int i=0 ; i < n ; i++ ) v[i] = i;
	// 順列生成してチェック
	do{
		double g = gravity(v);
		// 重心が低い かつ 重さに耐えられるとき
		if( check(v) && g < ans_g ){
			ans_g = g;
			ans = v;
		}
	}while( next_permutation(v.begin(),v.end()) );
}

// 探索
void dfs(vector<int>& v, int num){
	// 重さに耐えられるかチェック, 耐えられないときは探索打ち切り
	if( !check(v) ) return;
	
	if( num == n ){
		double g = gravity(v);
		if( g < ans_g ){ // 重心が低いとき
			ans_g = g;
			ans = v;
		}
		return;
	}
	
	for(int i=0 ; i < n ; i++ ){
		if( used[i] ) continue;
		
		used[i] = true;
		v.push_back( i );
		dfs( v , num+1 );
		v.pop_back();
		used[i] = false;
	}
}

int main(){
	while( cin >> n , n ){
		// 初期化
		for(int i=0 ; i < 10 ; i++ ) used[i] = false;
		
		for(int i=0 ; i < n ; i++ ){
			cin >> f[i] >> w[i] >> s[i];
		}
		
		ans_g = 1e+9;
		vector<int> v;
		dfs( v , 0 );
		//solve();
		
		for(int i=0 ; i < ans.size() ; i++ ){
			cout << f[ans[i]] << endl;
		}
	}
}