#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=1000010;
const int INF=100000089;
struct Splay
{
int f,siz,cnt,value,tag;
int ch[2];
};
Splay s[MAXN];
int vis[MAXN],root,tot,n,m,k,x[MAXN],y[MAXN];
bool is(int x){return x==s[s[x].f].ch[1];}
int lc(int p){return s[p].ch[0];}
int rc(int p){return s[p].ch[1];}
void update(int x)
{
if(!x) return;
s[x].siz=s[x].cnt;
if(lc(x)) s[x].siz+=s[lc(x)].siz;
if(rc(x)) s[x].siz+=s[rc(x)].siz;
}
void pushdown(int x)
{
if(x&&s[x].tag)
{
s[rc(x)].tag^=1;
s[lc(x)].tag^=1;
swap(s[x].ch[1],s[x].ch[0]);
s[x].tag=0;
}
}
void rotate(int x)
{
int fnow=s[x].f,ffnow=s[fnow].f;
pushdown(x);
pushdown(fnow);
bool w=is(x);
s[fnow].ch[w]=s[x].ch[w^1];
s[s[fnow].ch[w]].f=fnow;
s[fnow].f=x;
s[x].f=ffnow;
s[x].ch[w^1]=fnow;
if(ffnow) s[ffnow].ch[s[ffnow].ch[1]==fnow]=x;
update(fnow);
}
inline void splay(int x,int to)
{
for(register int i;(i=s[x].f)!=to;rotate(x))
if(s[i].f!=to)
{
if(is(x)==is(i)) rotate(i);
else rotate(x);
}
if(to==0) root=x;
}
int build(int l,int r,int father)
{
if(l>r) return 0;
int mid=(l+r)>>1;
int now=++tot;
s[now].f=father;
s[now].ch[0]=s[now].ch[1]=0;
s[now].cnt++;
s[now].value=vis[mid];
s[now].siz++;
s[now].ch[0]=build(l,mid-1,now);
s[now].ch[1]=build(mid+1,r,now);
update(now);
return now;
}
int find(int x)
{
int now=root;
while(1)
{
pushdown(now);
if(x<=s[lc(now)].siz) now=lc(now);
else
{
x-=s[lc(now)].siz+1;
if(!x) return now;
else now=rc(now);
}
}
}
void reverse(int x,int y)
{
int l=find(x-1),r=find(y+1);
splay(l,0);
splay(r,l);
int pos=lc(rc(root));
s[pos].tag^=1;
}
void dfs(int now)
{
pushdown(now);
if(lc(now)) dfs(lc(now));
if(s[now].value!=-INF&&s[now].value!=INF) printf("%d\n",s[now].value);
if(rc(now)) dfs(rc(now));
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
vis[1]=-INF,vis[n+2]=INF;
for(int i=1;i<=n;i++) vis[i+1]=i;
root=build(1,n+2,0);
for(register int i=1;i<=m;i++) scanf("%d%d",&x[i],&y[i]);
for(register int i=1;i<=k;i++) for(register int j=1;j<=m;j++) reverse(x[j]+1,y[j]+1);
dfs(root);
}