#include <bits/stdc++.h>
using namespace std;
inline void fileIO(string s) {
  freopen((s + ".in").c_str(), "r", stdin);
  freopen((s + ".out").c_str(), "w", stdout);
}
template <class T, class S>
inline bool smin(T &a, S b) {
  return (T)b < a ? a = b, 1 : 0;
}
template <class T, class S>
inline bool smax(T &a, S b) {
  return a < (T)b ? a = b, 1 : 0;
}
constexpr int MOD = 1e9 + 7;
constexpr int N = 1e5 + 10;
template <typename T>
inline T mod(T &v) {
  return v = (v % MOD + MOD) % MOD;
}
template <typename S, typename T>
inline S add(S &l, T r) {
  return mod(l += r);
}
long long po(long long v, long long u) {
  return u ? po(v * v % MOD, u >> 1) * (u & 1 ? v : 1) % MOD : 1;
}
int n;
long long T, E, x[N], dp[N], seg[N << 1];
inline void segAssign(int id, long long val) {
  for (seg[id += n] = val; id > 1; id >>= 1)
    seg[id >> 1] = min(seg[id], seg[id ^ 1]);
}
inline long long segGet(int l, int r) {
  long long res = 1e18;
  for (l += n, r += n; l < r; l >>= 1, r >>= 1) {
    if (l & 1) smin(res, seg[l++]);
    if (r & 1) smin(res, seg[--r]);
  }
  return res;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> E >> T;
  n++;
  for (int i = 1; i < (int)n; i++) cin >> x[i];
  int ptr = 0;
  dp[0] = 0;
  segAssign(0, dp[0] + T - x[1]);
  for (int i = 1; i < (int)n; i++) {
    while (2 * (x[i] - x[ptr + 1]) >= T) {
      segAssign(ptr, dp[ptr] - 2 * x[ptr + 1]);
      ptr++;
    }
    dp[i] = min(segGet(0, ptr) + 2 * x[i], segGet(ptr, i) + x[i]);
    segAssign(i, dp[i] + T - x[i + 1]);
  }
  cout << E + dp[n - 1] << endl;
  return 0;
}
