#include <bits/stdc++.h>
using namespace std;
const int N = 2e3;
int n, h, aa[N + 2], vis[2][N + 1][N + 1][2];
double p, dp[2][N + 1][N + 1][2];
double dfs(int s1, int lo, int hi, int s2) {
  if (vis[s1][lo][hi][s2]) return dp[s1][lo][hi][s2];
  vis[s1][lo][hi][s2] = 1;
  if (lo > hi) return 0;
  double here = 0;
  int em;
  if (s1 == 0)
    em = min(aa[lo] - aa[lo - 1], h);
  else
    em = min(aa[lo] - aa[lo - 1] - h, h);
  here += 0.5 * p * em + 0.5 * p * dfs(0, lo + 1, hi, s2);
  em = aa[lo] + h;
  int i;
  for (i = lo + 1; i <= hi; i++) {
    if (aa[i] >= em) break;
    em = aa[i] + h;
  }
  if (i > hi) {
    if (s2 == 1)
      em = min(em, aa[hi + 1]);
    else
      em = min(em, aa[hi + 1] - h);
  }
  em -= aa[lo];
  here += 0.5 * (1.0 - p) * em + 0.5 * (1.0 - p) * dfs(1, i, hi, s2);
  if (s2 == 1)
    em = min(aa[hi + 1] - aa[hi], h);
  else
    em = min(aa[hi + 1] - aa[hi] - h, h);
  here += 0.5 * (1.0 - p) * em + 0.5 * (1.0 - p) * dfs(s1, lo, hi - 1, 1);
  em = aa[hi] - h;
  for (i = hi - 1; i >= lo; i--) {
    if (aa[i] <= em) break;
    em = aa[i] - h;
  }
  if (i < lo) {
    if (s1 == 0)
      em = max(em, aa[lo - 1]);
    else
      em = max(em, aa[lo - 1] + h);
  }
  em = aa[hi] - em;
  here += 0.5 * p * em + 0.5 * p * dfs(s1, lo, i, 0);
  return dp[s1][lo][hi][s2] = here;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> h >> p;
  for (int i = 1; i <= n; i++) cin >> aa[i];
  sort(aa + 1, aa + n + 1);
  aa[0] = -1e9, aa[n + 1] = 1e9;
  cout << setprecision(9) << fixed << dfs(0, 1, n, 1) << endl;
  return 0;
}
