#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
const int MAXN = 2010;
int N, H;
double P;
int X[MAXN];
double dp[MAXN][MAXN][2][2];
int cov[MAXN][2];
double getdp(int lt, int rt, int dl, int dr) {
  if (lt > rt) {
    return 0;
  }
  double &ref = dp[lt][rt][dl][dr];
  if (ref == ref) {
    return ref;
  }
  ref = 0;
  int nadd, ext;
  if (dl) {
    nadd = min(H, X[lt] - X[lt - 1] - H);
  } else {
    nadd = min(H, X[lt] - X[lt - 1]);
  }
  ref += 0.5 * P * (nadd + getdp(lt + 1, rt, 0, dr));
  ext = min(cov[lt][1], rt);
  if (ext == rt) {
    if (dr) {
      nadd = X[ext] - X[lt] + min(H, X[ext + 1] - X[ext]);
    } else {
      nadd = X[ext] - X[lt] + min(H, X[ext + 1] - X[ext] - H);
    }
  } else {
    nadd = X[ext] - X[lt] + H;
  }
  ref += 0.5 * (1 - P) * (nadd + getdp(ext + 1, rt, 1, dr));
  ext = max(cov[rt][0], lt);
  if (ext == lt) {
    if (dl) {
      nadd = X[rt] - X[ext] + min(H, X[ext] - X[ext - 1] - H);
    } else {
      nadd = X[rt] - X[ext] + min(H, X[ext] - X[ext - 1]);
    }
  } else {
    nadd = X[rt] - X[ext] + H;
  }
  ref += 0.5 * P * (nadd + getdp(lt, ext - 1, dl, 0));
  if (dr) {
    nadd = min(H, X[rt + 1] - X[rt]);
  } else {
    nadd = min(H, X[rt + 1] - X[rt] - H);
  }
  ref += 0.5 * (1 - P) * (nadd + getdp(lt, rt - 1, dl, 1));
  return ref;
}
int main() {
  if (fopen("input.txt", "r")) {
    freopen("input.txt", "r", stdin);
  }
  ios::sync_with_stdio(false);
  cin >> N >> H >> P;
  for (int i = 1; i <= N; i++) {
    cin >> X[i];
  }
  sort(X + 1, X + N + 1);
  X[0] = -1e9;
  X[N + 1] = 1e9;
  for (int i = 1; i <= N; i++) {
    for (int j = 0; j < 2; j++) {
      int &ref = cov[i][j];
      ref = i;
      if (j) {
        while (ref < N) {
          if (X[ref + 1] - X[ref] >= H) {
            break;
          }
          ref++;
        }
      } else {
        while (ref > 1) {
          if (X[ref] - X[ref - 1] >= H) {
            break;
          }
          ref--;
        }
      }
    }
  }
  memset((dp), (-1), sizeof(dp));
  cout << fixed << setprecision(15) << getdp(1, N, 0, 1) << endl;
}
