#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
long long n, ed, tad;
long long x[N];
long long dp[N];
long long seg[N * 4];
long long laz[N * 4];
long long get(long long l, long long r, long long v = 1, long long s = 0,
              long long e = N) {
  if (r <= s || e <= l) return 2e18;
  if (l <= s && e <= r) return seg[v];
  seg[v * 2] += laz[v];
  seg[v * 2 + 1] += laz[v];
  laz[v] = 0;
  return min(get(l, r, v * 2, s, ((s + e) / 2)),
             get(l, r, v * 2 + 1, ((s + e) / 2), e));
}
void add(long long l, long long r, long long val, long long v = 1,
         long long s = 0, long long e = N) {
  if (r <= s || e <= l) return;
  if (l <= s && e <= r) {
    seg[v] += val;
    laz[v] += val;
    return;
  }
  seg[v * 2] += laz[v];
  seg[v * 2 + 1] += laz[v];
  laz[v * 2] += laz[v];
  laz[v * 2 + 1] += laz[v];
  laz[v] = 0;
  add(l, r, val, v * 2, s, ((s + e) / 2));
  add(l, r, val, v * 2 + 1, ((s + e) / 2), e);
  seg[v] = min(seg[v * 2], seg[v * 2 + 1]);
}
long long tmp[N];
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> ed >> tad;
  long long pnt = -1;
  for (long long i = 1; i <= n; i++) {
    cin >> x[i];
    tmp[i] = 2e18;
    for (long long j = 1; j <= i; j++) {
      tmp[i] = min(tmp[i], tmp[j - 1] + x[j] - x[j - 1] +
                               max(2 * (x[i] - x[j]), tad) + x[i] - x[j]);
    }
  }
  cout << ed - x[n] + tmp[n] << '\n';
  return 0;
  for (long long i = 1; i <= n; i++) {
    if (i == 1) {
      add(0, 1, 0 + x[1] - 0 + tad);
    }
    add(0, pnt + 1, (x[i] - x[i - 1]) * 2);
    while ((x[i] - x[pnt + 1]) * 2 >= tad) {
      add(pnt, pnt + 1, (x[i] - x[pnt + 1]) * 2 - tad);
      pnt++;
    }
    add(0, i - 1, x[i] - x[i - 1]);
    dp[i] = get(0, i);
    add(i, i + 1, dp[i] + x[i + 1] - x[i] + tad);
  }
  cout << ed - x[n] + dp[n];
  return 0;
}
