#include <bits/stdc++.h>
using namespace std;
const int64_t LINF = 1LL << 62;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, E, T;
  cin >> n >> E >> T;
  vector<int> X(n + 1, 0);
  for (int i = 1; i <= n; ++i) {
    cin >> X[i];
  }
  vector<int64_t> dp(n + 1, 0);
  vector<pair<int, int64_t>> d;
  for (int i = 1; i <= n; ++i) {
    dp[i] = LINF;
    int j = i - 1;
    int64_t time = LINF;
    int64_t cval = dp[j] + X[j + 1] - X[j] + 3LL * (X[i] - X[j + 1]) +
                   max((int64_t)0, (int64_t)(T - 2LL * (X[i] - X[j + 1])));
    int64_t currSteady = T + 2 * X[j + 1];
    while (!d.empty()) {
      int p = d.back().first;
      int64_t pval = dp[p] + X[p + 1] - X[p] + 3LL * (X[i] - X[p + 1]) +
                     max((int64_t)0, (int64_t)(T - 2LL * (X[i] - X[p + 1])));
      if (pval <= cval) {
        time = -LINF;
        break;
      }
      int64_t prevSteady = T + 2 * X[p + 1];
      int64_t xcval =
          2 * (dp[j] + X[j + 1] - X[j]) + 3LL * (currSteady - 2 * X[j + 1]) +
          max((int64_t)0, (int64_t)(2 * T - currSteady + 2LL * X[j + 1]));
      int64_t xpval =
          2 * (dp[p] + X[p + 1] - X[p]) + 3LL * (currSteady - 2 * X[p + 1]) +
          max((int64_t)0, (int64_t)(2 * T - currSteady + 2LL * X[p + 1]));
      if (xcval < xpval) {
        time = LINF;
        break;
      }
      time = currSteady - (xcval - xpval);
      if (time < prevSteady) {
        time = LINF;
      }
      if (time <= d.back().second) {
        d.pop_back();
      } else {
        break;
      }
    }
    if (d.empty()) {
      time = LINF;
    }
    d.push_back(make_pair(j, time));
    while (2 * X[i] >= d.back().second) {
      d.pop_back();
    }
    int p = d.back().first;
    int64_t pval = dp[p] + X[p + 1] - X[p] + 3LL * (X[i] - X[p + 1]) +
                   max((int64_t)0, (int64_t)(T - 2LL * (X[i] - X[p + 1])));
    dp[i] = pval;
  }
  int64_t ans = dp[n] + E - X[n];
  cout << ans << '\n';
}
