#include <cstdio>
#include <vector>
#include <algorithm>
using std::abs;
struct plugs
{
int x,y;
int distToNext;
int distToOrigin;
bool operator<(const plugs &b) const
{
return distToOrigin<b.distToOrigin;
}
};
int main(void)
{
std::vector<plugs> s;
int i,x,y,N,M,K;
plugs *p;
p=(plugs*)malloc(sizeof(plugs));
scanf("%d%d%d",&N,&M,&K);
for(i=0;i<M;i++)
{
scanf("%d%d",&x,&y);
p->x=x;
p->y=y;
p->distToNext=0;
if (y==0 && 0<=x && x<N)
p->distToOrigin=x;
else if ( x==N && 0<y && y<=N)
p->distToOrigin=N+y;
else if ( y==N && 0<x && x<=N)
p->distToOrigin=3*N-x;
else
p->distToOrigin=4*N-y;
s.push_back(*p);
}
std::sort(s.begin(),s.end());
p->distToOrigin=s[0].distToOrigin+4*N;
s.push_back(*p);
for(i=0;i<M;i++)
s[i].distToNext=s[i+1].distToOrigin-s[i].distToOrigin;
int tmpSum=0,minVal=0x7FFFFFFF;
K--;
for(i=0;i<K;i++)
{
tmpSum+=s[i].distToNext;
}
for(i=0;i<M;i++)
{
tmpSum=tmpSum+s[(i+K)%M].distToNext-s[i].distToNext;
if(tmpSum<minVal)
minVal=tmpSum;
}
printf("%d\n",minVal);
delete p;
return 0;
}