#include<iostream>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<cmath>
using namespace std;
int main()
{
int l,n,m;
cin>>l>>n>>m;
int arr[50000];
int jl[50001];
for(int i=0;i<n;i++)
cin>>arr[i];
jl[0]=arr[0]-0;
jl[n]=l-arr[n-1];
for(int i=1;i<n;i++)
jl[i]=arr[i]-arr[i-1];
while(m--)
{
int mi=999999999;
int d=-1;
for(int i=0;i<n+1;i++) //找到当前最小距离
{
if(jl[i]==0)
continue;
if(mi>jl[i])
mi=jl[i],d=i;
}
if(d==0) //拿石头,0表示该处不存在
jl[1]+=jl[0],jl[0]=0;
else if(d==n)
jl[d-1]+=jl[d],jl[d]=0;
else
{
if(jl[d-1]<jl[d+1]) //选择左边还是右边
{ //即选择哪块石头
int i;
for(i=d-1;i>=0;i--) //忽略掉不存在的位置
if(jl[i]!=0)
break;
jl[i]+=jl[d]; //更新距离
}
else
{
int i;
for(i=d+1;i<n+1;i++)
if(jl[i]!=0)
break;
jl[i]+=jl[d];
}
jl[d]=0;
}
}
int min=999999999;
for(int i=0;i<n+1;i++) //找到当前最小距离
{
if(min>jl[i]&&jl[i]!=0)
min=jl[i];
}
cout<<min;
}