#include <bits/stdc++.h>
using namespace std;
int GLL(long long& x) { return scanf("%lld", &x); }
int GI(int& x) { return scanf("%d", &x); }
const int MAXN = 100010;
long long x[MAXN], dp[MAXN];
int n;
long long t, e;
int main() {
  GI(n);
  GLL(e);
  GLL(t);
  for (int i = 1; i <= (int)(n); i++) {
    GLL(x[i]);
  }
  x[n + 1] = e;
  dp[n + 1] = 0;
  dp[n] = t + (e - x[n]);
  for (int i = n - 1; i >= 1; i--) {
    long long timeToJ = t;
    dp[i] = timeToJ + (x[i + 1] - x[i]) + dp[i + 1];
    for (int j = i + 1; j <= n; j++) {
      timeToJ += (x[j] - x[j - 1]);
      timeToJ = max(timeToJ, x[j] - x[i] + t);
      dp[i] = min(
          dp[i], max(timeToJ, 3 * (x[j] - x[i])) + x[j + 1] - x[j] + dp[j + 1]);
    }
  }
  printf("%lld\n", dp[1] + x[1]);
  return 0;
}
