#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > v;
double sqr(double a) { return a * a; }
double dist(pair<int, int> a, pair<int, int> b) {
  return sqrt(sqr(a.first - b.first) + sqr(a.second - b.second));
}
int main(void) {
  int n, k;
  scanf("%d%d", &n, &k);
  k--;
  for (int i = 0; i < n; i++) {
    int x;
    scanf("%d", &x);
    v.push_back(make_pair(x, 0));
  }
  pair<int, int> P;
  int x, y;
  scanf("%d%d", &x, &y);
  P = make_pair(x, y);
  double ans = -1;
  if (k == n) {
    sort(v.begin(), v.end());
    double dist1 = dist(P, v[0]) + dist(v[0], v[n - 1]);
    double dist2 = dist(P, v[n - 1]) + dist(v[n - 1], v[0]);
    ans = min(dist1, dist2);
    printf("%.6lf\n", ans);
    return 0;
  }
  int val = v[k].first;
  sort(v.begin(), v.end());
  for (int i = 0; i < v.size(); i++)
    if (v[i].first == val) {
      k = i;
      break;
    }
  for (int i = 0; i < n; i++) {
    if (i < k) {
      double dist1 =
          dist(v[k], v[n - 1]) + dist(v[n - 1], v[i]) + dist(v[i], P);
      if (i) {
        dist1 += min(dist(P, v[i - 1]) + dist(v[i - 1], v[0]),
                     dist(P, v[0]) + dist(v[0], v[i - 1]));
      }
      double dist2 =
          dist(v[k], v[i]) + dist(v[i], v[n - 1]) + dist(v[n - 1], P);
      if (i) {
        dist2 += min(dist(P, v[i - 1]) + dist(v[i - 1], v[0]),
                     dist(P, v[0]) + dist(v[0], v[i - 1]));
      }
      if (ans < 0)
        ans = min(dist1, dist2);
      else
        ans = min(ans, min(dist1, dist2));
    } else if (i > k) {
      double dist1 = dist(v[k], v[0]) + dist(v[0], v[i]) + dist(v[i], P);
      if (i + 1 < n) {
        dist1 += min(dist(P, v[i + 1]) + dist(v[i + 1], v[n - 1]),
                     dist(P, v[n - 1]) + dist(v[n - 1], v[i + 1]));
      }
      double dist2 = dist(v[k], v[i]) + dist(v[i], v[0]) + dist(v[0], P);
      if (i + 1 < n) {
        dist2 += min(dist(P, v[i + 1]) + dist(v[i + 1], v[n - 1]),
                     dist(P, v[n - 1]) + dist(v[n - 1], v[i + 1]));
      }
      if (ans < 0)
        ans = min(dist1, dist2);
      else
        ans = min(ans, min(dist1, dist2));
    } else {
      double dist1 = dist(v[k], v[0]) + dist(v[0], P);
      if (i + 1 < n) {
        dist1 += min(dist(P, v[i + 1]) + dist(v[i + 1], v[n - 1]),
                     dist(P, v[n - 1]) + dist(v[n - 1], v[i + 1]));
      }
      double dist2 = dist(v[k], v[n - 1]) + dist(v[n - 1], P);
      if (i) {
        dist2 += min(dist(P, v[i - 1]) + dist(v[i - 1], v[0]),
                     dist(P, v[0]) + dist(v[0], v[i - 1]));
      }
      if (ans < 0)
        ans = min(dist1, dist2);
      else
        ans = min(ans, min(dist1, dist2));
    }
  }
  printf("%.6lf\n", ans);
  return 0;
}
