#ifdef DEBUG
#define _GLIBCXX_DEBUG
#endif

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

#define all(x) (x).begin(), (x).end()
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define un_map unordered_map
#define rep(i,a,n) for (int i = a; i < n; ++i) 
#define rrep(i,a,n) for (int i = a; i >= n; --i) 
#define irep(i,a,n,inc) for (int i = a; i < n; i += inc) 
#define endl "\n"

typedef long long ll;

void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '\"' << x << '\"';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}
 
template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
 
#ifndef ONLINE_JUDGE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define debug(x...)
#endif

#define int long long 

long long POW(long long a, long long b) {
	long long ans = 1;
	while (b) {
			if(b & 1) {
					ans = ans * a;
			}
			a = a * a;
			b /= 2;
	}
	return ans;
}



int32_t main() {
  IOS;
	int n, m, t; cin >> n >> m >> t;
	vector<pair<int,int>> a(m + 1);
	for (int i = 1; i <= m; ++i) {
		cin >> a[i].first >> a[i].second;
	}
	int N = n;
	bool ans = 1;
	//debug(a, t);
	a.push_back({t, t});
	//debug(a, t);
	for (int i = 1; i < m + 2; ++i) {
		n -= a[i].first - a[i - 1].second	;
		if (n <= 0) {
			ans = 0;
		}
		//debug(a[i].first, a[i].second, n);
		n += a[i].second - a[i].first;
		n = min(n, N);
		//debug(n);
	}
	if (ans) {
		cout << "Yes";
	}else {
		cout << "No";
	}
}












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

typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> ii;
typedef tuple<ll, ll, ll> iii;
typedef vector<ll> vi;
typedef vector<ii> vii;
typedef vector<iii> viii;
typedef vector<vi> vvi;
typedef vector<vii> vvii;
#define REP(i,n) for (ll i = 0; i < n; ++i)
#define REPR(i,n) for (ll i = n-1; i >= 0; --i)
#define FOR(i,m,n) for (ll i = m; i < n; ++i)
#define FORR(i,m,n) for (ll i = n-1; i >= m; --i)
#define FORE(x,xs) for (const auto& x : xs)
#define FORI(i,v) for (auto i = v.begin(); i != v.end(); i++)
#define ALL(v) v.begin(), v.end()
#define SORT(v) sort(ALL(v))
#define REV(v) reverse(ALL(v))
#define UNIQ(v) sort(ALL(v)); v.erase(unique(ALL(v)),end(v))
#define CHMIN(x,y) x = min(x, y)
#define CHMAX(x,y) x = max(x, y)
#define YES(b) cout << ((b) ? "YES" : "NO") << endl
#define Yes(b) cout << ((b) ? "Yes" : "No") << endl

const int MAX = 1e5+10;

int N, M, K;
set<int> A;

ld dp[2*MAX];

bool check(ld p) {
    fill_n(dp, MAX, 0);
    ld s = 0;
    REPR (i, N) {
        if (A.find(i) == A.end()) dp[i] = 1 + s / M;
        else dp[i] = p;
        s += dp[i];
        s -= dp[i+M];
    }
    return dp[0] > p;
}

int main() {
    cout << fixed << setprecision(15);
    cin >> N >> M >> K;
    REP (i, K) {
        int a;
        cin >> a;
        A.insert(a);
        if (A.find(a-M+1) != A.end() && distance(A.find(a-M+1), A.find(a)) == M-1) {
            cout << -1 << endl;
            return 0;
        }
    }

    ld ub = 1;
    while (1) {
        ld ok = 1e-3, ng = ub;
        while (ng - ok > 1e-4) {
            ld mid = sqrtl(ok * ng);
            if (check(mid)) ok = mid;
            else ng = mid;
        }
        if (ub - ok > 1e3) {
            cout << ok << endl;
            return 0;
        }
        ub *= 4;
    }
}
