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

//UnionFindテンプレ
class UnionFind {
    // まとめる 判定 サイズを知る
    public:
    // Aから見た親の番号を格納する。rootだったら-1*その集合のサイズ。
    vector<int> Parent;

    // 初期化
    UnionFind(int N) {
        Parent = vector<int>(N, -1);
    }

    // Aのrootを調べる
    int root(int A) {
        if (Parent[A] < 0) return A;  // マイナスならそれはroot
        return Parent[A] = root(Parent[A]);
    }

    // rootの値をプラスに戻して返す(サイズ)
    int size(int A) {
        return -Parent[root(A)];
    }

    // くっつける関数
    bool connect(int A, int B) {
        // AとBのroot同士をくっつける
        A = root(A);  // ここのAは、"rootの場所"の意味
        B = root(B);
        if (A == B) return false;  // 既にくっついている
        if (size(A) < size(B))
        swap(A, B);            // 大きい方にくっつけるために中身交換
        Parent[A] += Parent[B];  // 中身更新
        Parent[B] = A;
        return true;
    }

    //連結か調べる関数
    bool issame(int A, int B) {
        return root(A) == root(B);
    }
};

//chmin,chmax関数(DP用)
template<class T> inline bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template<class T> inline bool chmax(T& a, T b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}

//aのZ/mZでの逆元
int64_t modinv(int64_t a, int64_t m) {
    int64_t b = m, u = 1, v = 0;
    while (b) {
        int64_t t = a / b;
        a -= t * b; swap(a, b);
        u -= t * v; swap(u, v);
    }
    u %= m;
    if (u < 0) u += m;
    return u;
}



//最大公約数
int64_t gcd(int64_t a, int64_t b) {
    if (a % b == 0) {
        return b;
    }
    return gcd(b, a%b);
}

//エラストテレスのふるい
vector<bool> make_is_prime(int N) {
    vector<bool> prime(N + 1, true);
    if (N >= 0) prime[0] = false;
    if (N >= 1) prime[1] = false;
    for (int i = 2; i * i <= N; i++) {
        if (!prime[i]) continue;
        for (int j = i * i; j <= N; j += i) {
            prime[j] = false;
        }
    }
    return prime;
}
//累乗a^b
int64_t pow(int a, int b) {
    int64_t ans = (int64_t)1;
    for (int i = 0; i < b; i++) {
        ans *= (int64_t)a;
    }
    return ans;
}

//ここから


int main() {
    int N,S,D; cin>>N>>S>>D;
    for (int i = 0; i < N; i++) {
        int X,Y; cin>>X>>Y;
        if (X < S && Y > D) {
            cout << "Yes" << endl;
            return 0;
        }
    }
    cout << "No" << endl;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef unsigned long long llp;
#define mod 1000000007
#define deb(x) cerr << '\t' << "[" << #x << ": "<< x << "]\n";
#define f first
#define s second
#define pb push_back
/*
numeric_limits<llp>::max();
*/
void solution();
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    llp tc = 1;
    //cin >> tc;
    for (llp t = 0; t < tc; ++t) {
		//cout << "Case #" << tc+1 << ": ";
		solution();
	}
	//intmax = 2e9 (ten digits)
    return 0;
}

vector<int> seive(int n) {
/*Returns a vector<int> with all the prime numbers till n
 * - Time complexity: O(nlglg(n))
 * - n >= 2
 * - if n is less returns a empty vector
*/
	vector<bool> is_prime(n+1, 1);
	is_prime[0] = is_prime[1] = 0;
	for(int i = 2; i*i <= n; ++i) {
		if(is_prime[i]) {
			for(int j = i*i; j <= n; j+=i) is_prime[j] = 0;
		}
	}
	
	vector<int> primes;
	for(int i = 0; i < n+1; ++i) if(is_prime[i]) primes.push_back(i);
	return primes;
}

int fx(int p, int n) {
	int c = -1;
	while(n) {
		c++;
		n/=p;
	}
	return c;
}
void solution() {
	int n, s, d;
	int x, y;
	cin >> n >> s >> d;
	bool canwe = 0;
	for(int i = 0 ;i < n; ++i) {
		cin >> x >> y;
		if(x < s and y > d) canwe = 1;
	}
	cout << "No\0Yes\0"+3*canwe;
}
