#include <climits>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <set>
#include <string>
#include <map>
#include <vector>//sort法  昇順 std::sort(v.begin(),v.end()); 降順 std::sort(v.begin(),v.end(),std::greater<int>());
#include <queue>//待ち行列 / 最大値から priority_queue<TYPE> 最小値から priority_queue<TYPE, vector<TYPE>, greater<TYPE>>
#include <stack>//積ん読

typedef long long ll;

#define REP(i, f, t) for(long i=(int)f;i<(int)t;i++)
#define rep(i,t) REP(i,0,t)  

#define PInt std::pair<int ,int>
#define PDbl std::pair<double ,double>
#define PLng std::pair<long, long>
#define PLL std::pair<ll, ll>
#define PIDbl std::pair<int , double>
#define PDInt std::pair<double , int>
#define tIII std::tuple<int, int, int>
#define vInt std::vector<int>
#define vDbl std::vector<double>
#define vLng std::vector<long>
#define vLL std::vector<ll>
#define vPInt std::vector<PInt>
#define vPLL std::vector<PLL>

template<typename T1, typename  T2, typename  T3> bool rangeCheck(T1 min, T2 x, T3 max) { return min <= x && x < max; }

/*桁数の指定
//#include<iomanip>
//もう一度桁数を指定するまでこのまま固定される
cout << std::setprecision(3) << 3.1415 << endl;//3.14
*/

/*回転行列の公式
|cosθ, -sinθ||x| = | xcosθ - ysinθ |
|sinθ,  cosθ||y|   | xsinθ + ycosθ |
*/

/*集合の整数表現

空集合φ ................................... 0
i番目の要素のみからなる集合{i} ............. 1 << i
n個の要素すべてからなる集合{0,1,...,n-1} ... (1 << n) -1
要素iがSに含まれるかi∈S ................... if(S>>i & 1)
集合Sに要素iを加えるS∪{i} ................. S | 1<<i
集合Sから要素iを取り除くS＼{i} ............. S & ~(1<<i)
集合Sと集合Tの和集合/共通部分 ... S | T / S & T

-部分集合の列挙方法
std::bitset<sup.size()> sub = sup;
do {
  //部分集合に対する処理
  sub = (sub-1) & sup;
} while(sub != sup); // 0の次は-1&sup=supになる

-サイズkの部分集合の列挙方法
std::bitset<k> = comb((1 << k) -1);
while(comb < 1 << n){
	//ここで組み合わせに対して処理をする
	std::bitset<k> x = comb & -comb, y = comb + x;
	comb = ((comb & ~y) / x >> 1) | y;
}
*/

/*組み合わせ
vector<vLL> comb(int n) {
 vector<vLL> v(n + 1,vLL(n + 1, 0));
  for (int i = 0; i < v.size(); i++) {
	v[i][0] = 1;
	v[i][i] = 1;
  }
  for (int j = 1; j < v.size(); j++) {
	for (int k = 1; k < j; k++) {
	  v[j][k] = (v[j - 1][k - 1] + v[j - 1][k]);
	}
  }
  return v;
}
*/

using namespace std;

int main(void) {
	int N;
	cin >> N;

	int res = INT_MAX;

	int a, p, x;
	rep(i, N) {
		cin >> a >> p >> x;
		if (a < x) {
			res = min(res, p);
		}
	}
	
	if (res == INT_MAX) {
		cout << -1 << endl;
	}
	else {
		cout << res << endl;
	}
	return 0;
}
/*
3
3 9 5
4 8 5
5 7 5
8

3
5 9 5
6 8 5
7 7 5
-1

10
158260522 877914575 602436426
24979445 861648772 623690081
433933447 476190629 262703497
211047202 971407775 628894325
731963982 822804784 450968417
430302156 982631932 161735902
880895728 923078537 707723857
189330739 910286918 802329211
404539679 303238506 317063340
492686568 773361868 125660016
861648772

*/
//#define _GLIBCXX_DEBUG
#include <bits/stdc++.h>
#include <algorithm>
#define rep(i,n) for(int i=0;i<(n);++i)
#define all(a) (a).begin(),(a).end()
using namespace std;
using Graph = vector<vector<int>>;
typedef long long ll;
//using Graph = vector<vector<pair<ll,ll>>>;
const int mod =1e+9+7;

const int dy[4]={0,1,0,-1};
const int dx[4]={1,0,-1,0};

const ll INF=1e18;

int main(){
    ll n; cin>>n;
    vector<vector<ll>>c(n,vector<ll>(3));
    rep(i,n){
        cin>>c[i][1]>>c[i][0]>>c[i][2];
        c[i][2]-=c[i][1];
    }
    sort(all(c));
    rep(i,n){
        if(c[i][2]>0){
            cout<<c[i][0]<<endl;
            return 0;
        }
    }
    cout<<-1<<endl;

}







