#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
const char IN[]="stergeri.in",OUT[]="stergeri.out";
const int mod=101,prime=13;
struct hash{
int poz;
int val;
};
vector<hash> H[mod];
int N,M,K;
unsigned int key(unsigned int x){
return 1LL*x*13%mod;
}
void add(unsigned int poz){
hash h={poz,0};
H[key(poz)].push_back(h);
}
int get(unsigned int poz){
int k=key(poz);
for (int i=0;i<(int)H[k].size();++i) if (H[k][i].poz==poz)
return H[k][i].val;
return 0;
}
void set(unsigned int poz,int x){
int k=key(poz);
for (int i=0;i<(int)H[k].size();++i) if (H[k][i].poz==poz){
H[k][i].val=x;
return;
}
add(poz);
set(poz,x);
}
void update(unsigned int poz,int st,int dr,int x,int y){
if (x<=st && dr<=y){
set(poz,dr-st+1);
return;
}
int m=(st+dr)>>1;
if (x<=m) update(2*poz,st,m,x,y);
if (m< y) update(2*poz+1,m+1,dr,x,y);
set(poz,get(2*poz)+get(2*poz+1));
}
int solve(int k){
unsigned int poz=1;
int st=1,dr=N,x,m;
while (st<dr){
m=(st+dr)>>1;
x=m-st+1-get(2*poz);
if (k>x)
k-=x,st=m+1,poz=2*poz+1;
else
dr=m,poz=2*poz;
}
return st;
}
int main()
{
int x,y,nx,ny;
freopen(IN,"r",stdin);
scanf("%d%d%d",&N,&M,&K);
while (M--)
{
scanf("%d%d",&x,&y);
nx=solve(x);
ny=solve(y);
update(1,1,N,nx,ny);
}
fclose(stdin);
freopen(OUT,"w",stdout);
printf("%d\n",solve(K));
fclose(stdout);
return 0;
}