program AT842;
uses math;
var
x,y,b:array[0..100001] of longint;
i,k,m,n,o,p,mc:longint;
function hahacmp(x,y:longint):boolean;
begin
exit(x<y);
end;
procedure hahaswap(var x,y:longint);
var
t:longint;
begin
t:=x;
x:=y;
y:=t;
end;
procedure haha(l,r:longint);
var
o,p,m,t:longint;
begin
o:=l;
p:=r;
m:=x[(l+r)>>1];
repeat
while hahacmp(x[o],m) do inc(o);
while hahacmp(m,x[p]) do dec(p);
if o>p then break;
hahaswap(x[o],x[p]);
hahaswap(y[o],y[p]);
inc(o);
dec(p);
until o>p;
if o<r then haha(o,r);
if l<p then haha(l,p);
end;
procedure hahaup(k:longint);
begin
while k>1 do
begin
if hahacmp(b[k>>1],b[k]) then break;
hahaswap(b[k],b[k>>1]);
k:=k>>1;
end;
end;
procedure hahadown(k,w:longint);
var
p:longint;
begin
while k<<1<=w do
begin
p:=k<<1;
if hahacmp(b[p+1],b[p]) and (p+1<=w) then inc(p);
if hahacmp(b[k],b[p]) then break;
hahaswap(b[p],b[k]);
k:=p;
end;
end;
function hahaseki(z:longint):boolean;
var
xc,yc,o,p,s,l:longint;
begin
s:=0;
xc:=0;
yc:=k;
p:=0;
o:=1;
while p+z<=m do
begin
while (o<=n) and (x[o]<=p+z) do
begin
inc(s);
b[s]:=y[o];
hahaup(s);
inc(o);
end;
if s=0 then
begin
if yc=0 then exit(false);
p:=xc;
dec(yc);
continue;
end;
l:=b[1];
hahaswap(b[1],b[s]);
hahadown(1,s-1);
dec(s);
xc:=max(xc,l);
if l<p then continue;
if l>p+z then p:=p+z
else p:=l;
end;
exit(true);
end;
begin
readln(n,m,k);
for i:=1 to n do
readln(x[i],y[i]);
haha(1,n);
o:=1;
p:=m+1;
while o<=p do
begin
mc:=(o+p)>>1;
if hahaseki(mc) then p:=mc-1
else o:=mc+1;
end;
writeln(o);
end.