#include <bits/stdc++.h>
using namespace std;
double f[2008][2008][2][2];
int x[2008];
int main() {
  int n, h, i, j;
  double p, ans;
  scanf("%d%d%lf", &n, &h, &p);
  for (i = 1; i <= n; i++) scanf("%d", &x[i]);
  x[0] = -400000000;
  x[n + 1] = 400000000;
  sort(x, x + n + 2);
  f[1][n][0][0] = 1.0;
  ans = 0.0;
  for (i = n; i >= 1; i--)
    for (j = 1; i + j - 1 <= n; j++) {
      int l = j, r = i + j - 1;
      if (i == 1) {
        if (x[l] - x[l - 1] < h)
          ans += max(min(x[l + 1] - x[l], h) - (h - x[l] + x[l - 1]), 0) *
                 f[l][r][1][1];
        else
          ans += (1.0 - p) * min(x[l + 1] - x[l], h) * f[l][r][1][1] +
                 p * min(x[l] - x[l - 1] - h, h) * f[l][r][1][1];
        if (x[l + 1] - x[l] < h)
          ans += max(min(x[l] - x[l - 1], h) - (h - x[l + 1] + x[l]), 0) *
                 f[l][r][0][0];
        else
          ans += p * min(x[l] - x[l - 1], h) * f[l][r][0][0] +
                 (1.0 - p) * min(x[l + 1] - x[l] - h, h) * f[l][r][0][0];
        ans += p * min(x[l] - x[l - 1], h) * f[l][r][0][1] +
               (1.0 - p) * min(x[l + 1] - x[l], h) * f[l][r][0][1];
        if (x[l] - x[l - 1] >= h && x[l + 1] - x[l] >= h)
          ans += p * min(x[l] - x[l - 1] - h, h) * f[l][r][1][0] +
                 (1.0 - p) * min(x[l + 1] - x[l] - h, h) * f[l][r][1][0];
        else if (x[l] - x[l - 1] >= h)
          ans += max(min(x[l] - x[l - 1] - h, h) - (h - x[l + 1] + x[l]), 0) *
                 f[l][r][1][0];
        else if (x[l + 1] - x[l] >= h)
          ans += max(min(x[l + 1] - x[l] - h, h) - (h - x[l] + x[l - 1]), 0) *
                 f[l][r][1][0];
      } else {
        if (x[l] - x[l - 1] < h) {
          f[l + 1][r][1][1] += f[l][r][1][1];
          ans += max(min(x[r + 1] - x[l], h) - (h - x[l] + x[l - 1]), 0) *
                 f[l][r][1][1];
        } else {
          f[l + 1][r][1][1] += 0.5 * (1.0 - p) * f[l][r][1][1];
          ans += min(x[r + 1] - x[l], h) * 0.5 * (1.0 - p) * f[l][r][1][1];
          f[l + 1][r][0][1] += 0.5 * p * f[l][r][1][1];
          ans += min(x[l] - x[l - 1] - h, h) * 0.5 * p * f[l][r][1][1];
          f[l][r - 1][1][0] += 0.5 * p * f[l][r][1][1];
          ans += min(x[r] - x[l - 1] - h, h) * 0.5 * p * f[l][r][1][1];
          f[l][r - 1][1][1] += 0.5 * (1.0 - p) * f[l][r][1][1];
          ans += min(x[r + 1] - x[r], h) * 0.5 * (1.0 - p) * f[l][r][1][1];
        }
        if (x[r + 1] - x[r] < h) {
          f[l][r - 1][0][0] += f[l][r][0][0];
          ans += max((min(x[r] - x[l - 1], h) - (h - x[r + 1] + x[r])), 0) *
                 f[l][r][0][0];
        } else {
          f[l + 1][r][1][0] += 0.5 * (1.0 - p) * f[l][r][0][0];
          ans += min(x[r + 1] - x[l] - h, h) * 0.5 * (1.0 - p) * f[l][r][0][0];
          f[l + 1][r][0][0] += 0.5 * p * f[l][r][0][0];
          ans += min(x[l] - x[l - 1], h) * 0.5 * p * f[l][r][0][0];
          f[l][r - 1][0][0] += 0.5 * p * f[l][r][0][0];
          ans += min(x[r] - x[l - 1], h) * 0.5 * p * f[l][r][0][0];
          f[l][r - 1][0][1] += 0.5 * (1.0 - p) * f[l][r][0][0];
          ans += min(x[r + 1] - x[r] - h, h) * 0.5 * (1.0 - p) * f[l][r][0][0];
        }
        f[l + 1][r][0][1] += 0.5 * p * f[l][r][0][1];
        ans += min(x[l] - x[l - 1], h) * 0.5 * p * f[l][r][0][1];
        f[l + 1][r][1][1] += 0.5 * (1.0 - p) * f[l][r][0][1];
        ans += min(x[r + 1] - x[l], h) * 0.5 * (1.0 - p) * f[l][r][0][1];
        f[l][r - 1][0][0] += 0.5 * p * f[l][r][0][1];
        ans += min(x[r] - x[l - 1], h) * 0.5 * p * f[l][r][0][1];
        f[l][r - 1][0][1] += 0.5 * (1.0 - p) * f[l][r][0][1];
        ans += min(x[r + 1] - x[r], h) * 0.5 * (1.0 - p) * f[l][r][0][1];
        if (x[l] - x[l - 1] >= h && x[r + 1] - x[r] >= h) {
          f[l + 1][r][0][0] += 0.5 * p * f[l][r][1][0];
          ans += min(x[l] - x[l - 1] - h, h) * 0.5 * p * f[l][r][1][0];
          f[l + 1][r][1][0] += 0.5 * (1.0 - p) * f[l][r][1][0];
          ans += min(x[r + 1] - x[l] - h, h) * 0.5 * (1.0 - p) * f[l][r][1][0];
          f[l][r - 1][1][0] += 0.5 * p * f[l][r][1][0];
          ans += min(x[r] - x[l - 1] - h, h) * 0.5 * p * f[l][r][1][0];
          f[l][r - 1][1][1] += 0.5 * (1.0 - p) * f[l][r][1][0];
          ans += min(x[r + 1] - x[r] - h, h) * 0.5 * (1.0 - p) * f[l][r][1][0];
        } else if (x[l] - x[l - 1] >= h) {
          f[l][r - 1][1][0] += f[l][r][1][0];
          ans += max(min(x[r] - x[l - 1] - h, h) - (h - x[r + 1] + x[r]), 0) *
                 f[l][r][1][0];
        } else if (x[r + 1] - x[r] >= h) {
          f[l + 1][r][1][0] += f[l][r][1][0];
          ans += max(min(x[r + 1] - x[l] - h, h) - (h - x[l] + x[l - 1]), 0) *
                 f[l][r][1][0];
        }
      }
    }
  printf("%.15f", ans);
  return 0;
}
