import std.stdio;
import std.array;
import std.string;
import std.conv;
import std.algorithm;
import std.typecons;
import std.range;
import std.random;
import std.range;

void main() {
  auto input = readln.split;
  auto N = input[0].to!int;
  auto E = input[1].to!long;
  auto T = input[2].to!long;
  auto X = readln.split.map!(to!long).array;

  Tuple!(long, int, int)[] hoge;
  foreach (i; 0..N)
    foreach (j; i+1..N) {
      long d = X[j] - X[i];
      long score = d*2+max(0, T-2*d) - (j-i+1)*T;
      if (score < 0)
	hoge ~= tuple(score, i, j);
    }
  hoge = hoge.sort;

  Tuple!(long, int, int)[] piyo;
  foreach (h; hoge) {
    bool flag = true;
    foreach (p; piyo) {
      if ((p[1] <= h[1] && h[1] <= p[2] ||
	   p[1] <= h[2] && h[2] <= p[2])) {
	    flag = false;
	    break;
      }
    }
    if (flag)
      piyo ~= h;
  }

  long ans = E+T*N;
  foreach (p; piyo)
    ans -= p[0];
  writeln(ans);
}