def ok(x,ml):
if x>=0 and x<=ml:
return True
else:
return False
n,bl,ml=map(int,input().split())
w=[0]
w.extend(list(map(int,input().split())))
dp=[[-1]*2 for i in range(1+n)]
dp[0][0]=dp[0][1]=bl
for i in range(1,n+1):
if not ok(dp[i-1][0],ml) and not ok(dp[i-1][1],ml):
break
elif ok(dp[i-1][0],ml) or ok(dp[i-1][1],ml):
if ok(dp[i-1][0],ml):
d=dp[i-1][0]
else:
d=dp[i-1][1]
dp[i][0]=d-w[i]
dp[i][1]=d+w[i]
else:
dp[i][0]=max(dp[i-1][0],dp[i-1][1])-w[i]
dp[i][1]=max(dp[i-1][0],dp[i-1][1])+w[i]
if (not ok(dp[n][0],ml) and not ok(dp[n][1],ml)) or i<n:
print(-1)
else:
if ok(dp[n][0],ml) and not ok(dp[n][1],ml):
d=dp[n][0]
elif not ok(dp[n][0],ml) and ok(dp[n][1],ml):
d=dp[n][1]
else:
d=max(dp[n][0],dp[n][1])
print(d)