def judge(x):
tot=0 #tot代表计数器,记录以前答案需要移走的实际石头数
i=0 #代表下一块石头的编号
now=0 #代表模拟跳石头的人当前在什么位置
while i<n+1:
i+=1
if data[i]-data[now]<x: #x为找到的最优解,若跳跃距离小于最优解,则计数器+1移动这块石头
tot+=1
else:
now=i #跳到石头上
if tot>m: #移动石头的个数非法
return False
else:
return True
l,n,m=map(int,input().split())
data=[0]
for i in range(n):
a=int(input())
data.append(a)
data.append(l)
left=1
right=l
while left<=right:
mid=(left+right)//2
if judge(mid): #在右边界找最大值
ans=mid
l=mid+1
else:
r=mid-1
print(ans)