#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3fffffff;
const long long _INF = 0x7ffffffffffffffll;
const double EPS = 1e-9;
const double PI = acos(-1.0);
template <class T, class INT>
inline T pow(T x, INT y) {
  T res(1);
  for (T tt(x); y; y /= 2) {
    if (y & 1) res *= tt;
    tt *= tt;
  }
  return res;
}
template <class T, class INT>
inline T pow(T x, INT y, T p) {
  T res(1);
  for (T tt(x); y; y /= 2) {
    if (y & 1) res = res * tt % p;
    tt = tt * tt % p;
  }
  return res;
}
int toInt(string s) {
  int x = 0;
  istringstream sin(s);
  sin >> x;
  return x;
}
template <class T>
inline string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
template <class INT>
inline INT gcd(INT x, INT y) {
  return y ? gcd(y, x % y) : x;
}
template <class INT>
inline int calc_bits(INT x) {
  return x ? (x & 1) + calc_bits(x >> 1) : 0;
}
const int MAXN = 100000 + 1;
int n, k, x[MAXN];
long long xx, yy, sx;
inline double dis(int a) {
  return sqrt(((xx - x[a]) * (xx - x[a])) + ((yy) * (yy)));
}
inline double calc(int a, int b) {
  return min(dis(a), dis(b)) + abs(x[a] - x[b]);
}
inline double _calc(int a, int b) {
  return min(abs(sx - x[a]) + dis(b), abs(sx - x[b]) + dis(a)) +
         abs(x[a] - x[b]);
}
int main(int argc, char* argv[]) {
  cin >> n >> k;
  for (int i = 0; i < (n + 1); ++i) cin >> x[i];
  cin >> yy;
  sx = x[--k];
  sort(x, x + n);
  xx = x[n];
  if (k == n) {
    printf("%.9lf\n", calc(0, n - 1));
    return 0;
  }
  double ans = _calc(0, n - 1);
  for (int i = 0; i < (n); ++i) {
    if (i < n - 1)
      ans = ans > (_calc(i + 1, n - 1) + calc(0, i))
                ? (_calc(i + 1, n - 1) + calc(0, i))
                : ans;
    if (i)
      ans = ans > (_calc(0, i - 1) + calc(i, n - 1))
                ? (_calc(0, i - 1) + calc(i, n - 1))
                : ans;
  }
  printf("%.9lf\n", ans);
}
