#include <bits/stdc++.h>
using namespace std;
long long int n, h;
double p;
long long int dizi[2004];
bool used[2004][2004][2][2];
double dp[2004][2004][2][2];
long double f(int x, int y, int a, int b) {
  if (x > y) return 0;
  if (used[x][y][a][b]) return dp[x][y][a][b];
  used[x][y][a][b] = 1;
  long long int sol = (a ? dizi[x - 1] + h : dizi[x - 1]);
  long long int sag = (b == 0 ? dizi[y + 1] - h : dizi[y + 1]);
  if (x == y) {
    if (sol > dizi[x]) return dp[x][y][a][b] = min(dizi[x] + h, sag) - dizi[x];
    if (sag < dizi[y]) return dp[x][y][a][b] = dizi[y] - max(sol, dizi[y] - h);
    long double son1 = dizi[x] - max(sol, dizi[x] - h);
    long double son2 = min(dizi[x] + h, sag) - dizi[x];
    long double son3 = dizi[y] - max(sol, dizi[y] - h);
    long double son4 = min(sag, dizi[y] + h) - dizi[y];
    return dp[x][y][a][b] =
               (son1 * p + son2 * (1 - p) + son3 * p + son4 * (1 - p)) / 2;
  }
  if (sol > dizi[x])
    return dp[x][y][a][b] =
               f(x + 1, y, 1, b) + min(dizi[x] + h, dizi[x + 1]) - dizi[x];
  if (sag < dizi[y])
    return dp[x][y][a][b] =
               f(x, y - 1, a, 0) + dizi[y] - max(dizi[y - 1], dizi[y] - h);
  long double son1 = f(x + 1, y, 0, b) + dizi[x] - max(sol, dizi[x] - h);
  long double son2 =
      f(x + 1, y, 1, b) + min(dizi[x] + h, dizi[x + 1]) - dizi[x];
  long double son3 =
      f(x, y - 1, a, 0) + dizi[y] - max(dizi[y - 1], dizi[y] - h);
  long double son4 = f(x, y - 1, a, 1) + min(sag, dizi[y] + h) - dizi[y];
  return dp[x][y][a][b] =
             (son1 * p + son2 * (1 - p) + son3 * p + son4 * (1 - p)) / 2;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> h >> p;
  dizi[0] = -1000000000000L;
  dizi[n + 1] = 1000000000000L;
  for (int i = 1; i <= n; i++) cin >> dizi[i];
  sort(dizi + 1, dizi + n + 1);
  cout.precision(100);
  cout << f(1, n, 0, 1) << endl;
  return 0;
}
