#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
  point(double x = 0, double y = 0) : x(x), y(y) {}
  bool operator<(point b) const { return x < b.x; }
  bool operator>(point b) const { return x > b.x; }
} p[100005], sp;
int N, M, K;
double ans, sum;
double dis(point a, point b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
double calc(int a, int b, int c) {
  return dis(p[a], p[b]) + dis(p[b], p[c]) + dis(p[c], sp);
}
int main() {
  int i, j, flag;
  double t1, t2;
  scanf("%d %d", &N, &K);
  for (i = 1; i <= N; i++) scanf("%lf", &p[i].x);
  scanf("%lf %lf", &sp.x, &sp.y);
  ans = 1e30;
  if (K <= N) {
    for (i = 1, j = 1; i <= N; i++)
      if (p[i] < p[K]) j++;
    K = j;
  }
  sort(p + 1, p + N + 1);
  if (K <= N) {
    if (N == 1) ans = dis(sp, p[1]);
    for (i = 0; i < K; i++) {
      t1 = min(calc(K, i + 1, N), calc(K, N, i + 1));
      if (i)
        t2 = dis(p[1], p[i]) + min(dis(sp, p[1]), dis(sp, p[i]));
      else
        t2 = 0;
      ans = min(ans, t1 + t2);
    }
    for (i = K; i <= N; i++) {
      t1 = min(calc(K, i, 1), calc(K, 1, i));
      if (i < N)
        t2 = dis(p[i + 1], p[N]) + min(dis(sp, p[i + 1]), dis(sp, p[N]));
      else
        t2 = 0;
      ans = min(ans, t1 + t2);
    }
  } else
    ans = dis(p[1], p[N]) + min(dis(sp, p[1]), dis(sp, p[N]));
  printf("%.7lf\n", ans);
  return 0;
}
