#include  <bits/stdc++.h>
using     ull = unsigned long long;
using     ll = long long;
using     namespace std;

#define   pf printf
#define   sc scanf
#define   nline cout << '\n'
#define   dbg(x) \
          cout << "debug " << #x << ": " << x << '\n';
#define   inp(t) cin >> (t)
#define   out(t) cout << (t)
#define   FOR(n,x) for(ll i = n; i < x; i++)
#define   FOR2(N,X) for(ll j = N; j < X; j++)
#define   wh(n) while(n--)
ll        fib[52] = {};
bool      isPrime[50];

void OJ(){
    // file I/O
    #ifndef ONLINE_JUDGE
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif
}

ll LCM(ll x, ll y){ return x * (y/__gcd(x,y)); } 

// string addition
string sum(string num1,string num2){
    int len1 = num1.length();
    int len2 = num2.length();
    string ans;
    bool end1 = false, end2 = false;
    int i = 0, carry = 0;
    
    // will break if num1 and num2 ends
    for( ;!end1 || !end2; ){
        // iterating in reverse order
        if(len1) len1--;
        if(len2) len2--;

        // adding num1 and num2
        int temp = (num1[len1]-48) + (num2[len2] - 48);
        temp += carry;

        carry = temp / 10;
        ans.push_back((temp % 10)+48);
        i++;

        // initializing to 0 if num1 or num2 ends
        if(!len1){ end1 = true; num1[len1] = '0'; }
        if(!len2){ end2 = true; num2[len2] = '0'; }
    }

    if(carry) ans.push_back(carry+48);
    reverse(ans.begin(), ans.end());
    return ans;
}

//str multiplication of a*b
string strMultiplication(string a, string b){
    string ans = "0";
    string postZeros = "";
 
    for(int i = b.length()-1; i >= 0; i--){
        int carry = 0;
        string current;

        if(b[i] == '0')
            current.push_back('0');
        else
            for(int j = a.length()-1; j >= 0; j--){
                int S1_j = a[j] - 48;
                int S2_i = b[i] - 48;
                int temp = (S1_j * S2_i) + carry;
                carry = temp/10;
                // if(current != "0")
                    current.push_back((char)((temp%10) + 48));
            }
        if(carry) current.push_back(carry+48);
        reverse(current.begin(), current.end());
        current += postZeros;
        ans = sum(ans,current);
        
        postZeros += "0";
    }
 
    return ans;
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    OJ();

    // Start
    ll n,m,t; inp(n) >> m >> t;
    bool flag = true;
    ll charge = n, last = 0;

    FOR(0,m){
        ll a,b; inp(a) >> b;
        charge = charge - (a - last);
        if(charge <= 0)
            flag = false;
        charge = charge + (b - a);
        last = b;
        if(charge > n)
            charge = n;
    }
    charge = charge - (t - last);
    if(flag && charge > 0)
        out("Yes");
    else
        out("No");
    nline;
}
// g++ F.cpp -std=c++14 -I . && ./a.out
#include <bits/stdc++.h>
using namespace std;
// #include <atcoder/all>
// using namespace atcoder;
// using mint = modint1000000007;
// using mint = modint998244353;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rep2(i, a, b) for (int i = a; i < (int)(b); i++)
#define rrep(i, a, b) for (int i = a; i > (int)(b); i--)
#define all(v) v.begin(), v.end()
using ll = long long;
const ll INF = 1e18;
// 変数定義
int N, M, Q, a, b, c, d, x, y, t, T, total, ans;

int main()
{
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> N >> M;
  vector<vector<int>> adj(N, vector<int>(N, 0));
  rep(i, M)
  {
    cin >> a >> b;
    adj[a - 1][b - 1] = 1;
    adj[b - 1][a - 1] = 1;
  }
  vector<int> dp(1 << N, N);
  dp[0] = 0;
  rep(S, 1 << N)
  {
    bool flag = true;
    vector<int> lis;
    rep(i, N)
    {
      if ((S >> i) % 2)
        lis.push_back(i);
    }
    for (auto p : lis)
    {
      for (auto q : lis)
      {
        if (p == q)
          break;
        if (adj[p][q] == 0)
        {
          flag = false;
          goto last;
        }
      }
    }
  last:
    if (flag == true)
      dp[S] = 1;
    else
    {
      T = (S - 1) & S;
      while (T > 0)
      {
        dp[S] = min(dp[S], dp[T] + dp[S - T]);
        T = (T - 1) & S;
      }
    }
  }
  cout << dp[(1 << N) - 1] << '\n';
  return 0;
}