#include <bits/stdc++.h>
using namespace std;
struct fast_ios {
  fast_ios() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(20);
  };
} fast_ios_;
template <typename T>
istream &operator>>(istream &is, vector<T> &v) {
  for (auto &x : v) is >> x;
  return is;
}
template <typename T>
ostream &operator<<(ostream &os, vector<T> &v) {
  for (long long i = 0; i < v.size(); i++) {
    cout << v[i];
    if (i != v.size() - 1) cout << endl;
  };
  return os;
}
template <typename T>
void Out(T x) {
  cout << x << endl;
}
template <typename T1, typename T2>
void Ans(bool first, T1 y, T2 n) {
  if (first)
    Out(y);
  else
    Out(n);
}
using vec = vector<long long>;
using mat = vector<vec>;
using Pii = pair<long long, long long>;
using PiP = pair<long long, Pii>;
using PPi = pair<Pii, long long>;
using bools = vector<bool>;
using pairs = vector<Pii>;
const long long mod = 1000000007;
signed main() {
  long long N, E, T;
  cin >> N >> E >> T;
  vec x(N);
  cin >> x;
  assert(N <= 2000);
  mat dp(N, vec(N, 1000000000000000000));
  dp[0][0] = 0;
  for (long long i = (0); i < (N); i++)
    dp[0][i] = max(x[0] + T, 2 * x[i] - x[0]);
  for (long long i = (1); i < (N); i++) {
    long long t = dp[i - 1][i - 1] + x[i] - x[i - 1];
    for (long long j = (i); j < (N); j++) {
      dp[i][j] = min(dp[i - 1][j] + x[i] - x[i - 1],
                     max(t + T, t + 2 * (x[j] - x[i])));
    }
  }
  long long ans = dp[N - 1][N - 1] + E - x[N - 1];
  Out(ans);
  return 0;
}
