#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
double x[maxn];
double X0, Y0;
double ret;
int n, K;
void init() {
  scanf("%d%d", &n, &K);
  for (int i = 1; i <= n; i++) scanf("%lf", &x[i]);
  scanf("%lf%lf", &X0, &Y0);
}
double Fabs(double x) { return x < 0 ? -x : x; }
double Fmin(double x, double y) { return x < y ? x : y; }
double dist(int t) { return sqrt((x[t] - X0) * (x[t] - X0) + Y0 * Y0); }
double check(int l, int r) {
  if (l > n || r < 1 || l > r) return 0;
  return Fmin(dist(l), dist(r)) + x[r] - x[l];
}
void work() {
  if (K == n + 1) {
    sort(x + 1, x + n + 1);
    ret = x[n] - x[1] + Fmin(dist(1), dist(n));
    return;
  }
  double ori = x[K];
  sort(x + 1, x + n + 1);
  for (int i = 1; i <= n; i++)
    if (Fabs(x[i] - ori) < 1e-5) K = i;
  ret = Fmin(x[K] - x[1] + dist(1) + check(K + 1, n),
             x[n] - x[K] + dist(n) + check(1, K - 1));
  for (int i = 1; i < K; i++) {
    ret = Fmin(ret, Fmin(x[n] - x[i] + x[K] - x[i] + dist(n),
                         x[n] - x[K] + x[n] - x[i] + dist(i)) +
                        check(1, i - 1));
  }
  for (int i = K + 1; i <= n; i++) {
    ret = Fmin(ret, Fmin(x[i] - x[K] + x[i] - x[1] + dist(1),
                         x[K] - x[1] + x[i] - x[1] + dist(i)) +
                        check(i + 1, n));
  }
}
void print() { printf("%.10lf\n", ret); }
int main() {
  init();
  work();
  print();
  return 0;
}
