#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e18;
long long x[111111], dp[111111], st[444444] = {inf};
long long upd(long long l, long long r, long long cur, long long ind,
              long long val) {
  if (ind < l or r < ind or r < l) return inf;
  if (l == r) return st[cur] = val;
  long long mid = (l + r) / 2;
  upd(mid + 1, r, cur * 2 + 2, ind, val);
  upd(l, mid, cur * 2 + 1, ind, val);
  return st[cur] = min(st[cur * 2 + 1], st[cur * 2 + 2]);
}
long long mn(long long l, long long r, long long sl, long long sr,
             long long cur) {
  if (sr < l or r < sl or r < l or sr < sl) return inf;
  if (l == r) return st[cur];
  long long mid = (l + r) / 2;
  return min(mn(l, mid, sl, sr, cur * 2 + 1),
             mn(mid + 1, r, sl, sr, cur * 2 + 2));
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n, t, e;
  cin >> n >> e >> t;
  for (long long i = 1; i <= n; i++) cin >> x[i];
  upd(0, n, 0, 0, -2 * x[1]);
  for (long long i = 1; i <= n; i++) {
    long long j = lower_bound(x + 1, x + n + 1, x[i] - t / 2.0) - x;
    if ((x[i] - x[j]) * 2 < t) j--;
    dp[i] = min(dp[j] + t, mn(0, n, 0, j - 1, 0) + 2 * x[i]);
    upd(0, n, 0, i, dp[i] - 2 * x[i + 1]);
  }
  cout << dp[n] + e << endl;
  return 0;
}
