#include <bits/stdc++.h>

using namespace std;

#define ar array
#define ll long long

const int MAX_N = 1e5 + 5;
const ll MOD = 1e9 + 7;
const ll INF = 1e9;

ll qexp(ll a, ll b, ll m) {
    ll res = 1;
    while (b) {
        if (b % 2) res = res * a % m;
        a = a * a % m;
        b /= 2;
    }
    return res;
}

vector<ll> fact;

void precompute(int n) {
    fact.assign(n + 1, 1); 
    for (int i = 1; i <= n; i++) fact[i] = fact[i - 1] * i % MOD;
}

ll nCk(int n, int k) {
    if (k < 0 || k > n) return 0;
    return fact[n] * qexp(fact[k], MOD - 2, MOD) % MOD * qexp(fact[n - k], MOD - 2, MOD) % MOD;
}

// Observation: Counting Diagonal-Avoiding Paths, similar to the method to calculate Catalan number

void solve() {
    ll n, m, k; cin >> n >> m >> k;
    if (n - m > k) {
        cout << 0 << "\n";
        return;
    }
    ll ans = nCk(n + m, n) - nCk(n + m, m + k + 1);
    if (ans < 0) ans += MOD;
    cout << ans << "\n";
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    precompute(2e6);
    int tc = 1;
    // cin >> tc;
    for (int t = 1; t <= tc; t++) {
        // cout << "Case #" << t << ": ";
        solve();
    }
}
#include<bits/stdc++.h> 
using namespace std;
#define ll long long int


int n,m,t;


void solve()
{
  cin>>n>>m>>t;
  int a[m],b[m],charge=n;
  bool flag=true;
  int time=0;
  for(int i=0;i<=m;++i) 
  { 
    if(i<m)
      cin>>a[i]>>b[i];
    else 
    {a[i]=t;
     b[i]=t;
    }
    charge= charge-(a[i]-time);

    if(charge<=0) flag=false;
    
    charge=min(n, charge+b[i]-a[i]);
    
 
    time=b[i];
    
    
  }
  
  if  (flag) cout<<"Yes";  else cout<<"No";

}
 
 
int main()
{
   ios::sync_with_stdio(0);
   cin.tie(0);
   
  
      solve();

 return 0;
}