#include<iostream>
#include<cstdio>
#include<set>
using namespace std;
long long dp[100010];
int x[100010];
int n,e;
long long t;
int st;
multiset<long long>s1,s2;
int main()
{
	scanf("%d%d%lld",&n,&e,&t);
	for(int i=1;i<=n;i++)scanf("%d",x+i);
	s2.insert(t);
	for(int i=1;i<=n;i++)
	{
		while(st+1<i && 2*(x[i]-x[st+1])>=t)
		{
			s2.erase(s2.find(dp[st]-x[st]+t));
			s1.insert(dp[st]-x[st]-2LL*x[st+1]);
			st++;
		}
		dp[i]=4e18;
		if(s1.size())dp[i]=min(dp[i],(*s1.begin())+3LL*x[i]);
		if(s2.size())dp[i]=min(dp[i],x[i]+(*s2.begin())),
		s2.insert(dp[i]-x[i]+t);
	}
	printf("%lld",dp[n]+e-x[n]);
	return 0;
} 