#include <bits/stdc++.h>
using namespace std;
const int maxn = 200008;
int n, e;
long long T;
int a[maxn];
long long f[maxn];
void check(int i, int j) {
  long long h = a[i];
  f[i] = min(f[i], f[j] + a[i] - a[j] +
                       max(T - 2 * (a[i] - a[j + 1]), h - a[j + 1]) + a[i] -
                       a[j + 1]);
}
int main() {
  cin >> n >> e >> T;
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  f[0] = 0;
  a[0] = 0;
  if (n <= 1000) {
    for (int i = 1; i <= n; i++) {
      f[i] = f[i - 1] + a[i] - a[i - 1] + T;
      for (int j = i - 2; j >= 0; j--) {
        check(i, j);
      }
    }
  } else {
    for (int i = 1; i <= n; i++) {
      f[i] = f[i - 1] + a[i] - a[i - 1] + T;
      for (int j = i - 2; j >= max(0, i - 200); j--) {
        check(i, j);
      }
      check(i, 0);
      check(i, i / 2);
    }
  }
  cout << f[n] + e - a[n] << endl;
  return 0;
}
