#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-8;
const int MAX_N = int(1e5) + 10;
struct Point {
  double x, y;
  Point(double x, double y) : x(x), y(y) {}
};
int n, m;
double x[MAX_N], y;
inline double dist(const Point &a, const Point &b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
int main() {
  scanf("%d%d", &n, &m);
  m--;
  for (int i = 0; i <= n; ++i) scanf("%lf", x + i);
  double startPos = x[m];
  scanf("%lf", &y);
  sort(x, x + n);
  for (int i = 0; i < n; ++i)
    if (fabs(x[i] - startPos) < EPS && m != n) {
      m = i;
      break;
    }
  double result = 1e30;
  if (m == n) {
    result =
        min(result, dist(Point(x[n], y), Point(x[0], 0)) + (x[n - 1] - x[0]));
    result = min(result,
                 dist(Point(x[n], y), Point(x[n - 1], 0)) + (x[n - 1] - x[0]));
  } else {
    for (int i = m; i < n; ++i) {
      double temp = (x[i] - x[m]) + (x[i] - x[0]);
      temp += dist(Point(x[0], 0), Point(x[n], y));
      if (i < n - 1) {
        temp += min(dist(Point(x[n], y), Point(x[i + 1], 0)),
                    dist(Point(x[n], y), Point(x[n - 1], 0)));
        temp += x[n - 1] - x[i + 1];
      }
      result = min(result, temp);
      temp = (x[m] - x[0]) + (x[i] - x[0]);
      temp += dist(Point(x[i], 0), Point(x[n], y));
      if (i < n - 1) {
        temp += min(dist(Point(x[n], y), Point(x[i + 1], 0)),
                    dist(Point(x[n], y), Point(x[n - 1], 0)));
        temp += x[n - 1] - x[i + 1];
      }
      result = min(result, temp);
    }
    for (int i = m; i >= 0; --i) {
      double temp = (x[m] - x[i]) + (x[n - 1] - x[i]);
      temp += dist(Point(x[n - 1], 0), Point(x[n], y));
      if (i > 0) {
        temp += min(dist(Point(x[n], y), Point(x[0], 0)),
                    dist(Point(x[n], y), Point(x[i - 1], 0)));
        temp += x[i - 1] - x[0];
      }
      result = min(result, temp);
      temp = (x[n - 1] - x[m]) + (x[n - 1] - x[i]);
      temp += dist(Point(x[i], 0), Point(x[n], y));
      if (i > 0) {
        temp += min(dist(Point(x[n], y), Point(x[0], 0)),
                    dist(Point(x[n], y), Point(x[i - 1], 0)));
        temp += x[i - 1] - x[0];
      }
      result = min(result, temp);
    }
  }
  printf("%.9f\n", result);
}
