def check(num): #是否在m次将最短距离比num大,如果可以返回True,否则返回Fales
global n
idx,i = 0,1
cnt = 0
while i <= n + 1:
if arr[i] - arr[idx] < num:
if i == n + 1:return False
cnt += 1
if cnt > m:return False
else:
idx = i
i += 1
return True
l,n,m = list(map(int,input().split()))
if m != 0:
arr = [0] + [int(input()) for i in range(n)]
arr.append(l)
left,right = 1,l
while left <= right:
mid = int((right + left) / 2)
if check(mid):
left = mid + 1
else:
right = mid - 1
print(right)
else:
if n == 0:
print(l)
else:
arr = [int(input()) for i in range(n)]
arr.append(l)
ans = float('inf')
for i in range(n):
if i == 0:
ans = min(ans,arr[i])
else:
ans = min(ans,arr[i] - arr[i-1])
print(ans)