#include <bits/stdc++.h>
using namespace std;
long long powmod(long long a, long long b) {
  long long tmp = 1;
  a %= 31011;
  for (; b; b >>= 1) {
    if (b & 1) tmp = tmp * a % 31011;
    a = a * a % 31011;
  }
  return tmp;
}
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
template <class T>
inline void R(T &xx) {
  xx = 0;
  char ch = getchar();
  bool F = 0;
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') F = 1, ch = getchar();
  while (ch >= '0' && ch <= '9')
    xx = xx + xx + (xx << 3) + ch - 48, ch = getchar();
  if (F) xx = -xx;
}
int n, a[200111], ax, ay, k, st;
inline double dis(int p) {
  return sqrt(((ax * 1. - a[p]) * (ax * 1. - a[p])) + ((ay * 1.) * (ay * 1.)));
}
inline double go(int l, int r) { return a[r] - a[l] + min(dis(l), dis(r)); }
inline double back(int l, int r) {
  return a[r] - a[l] + min(dis(r) + abs(st - a[l]), dis(l) + abs(st - a[r]));
}
int main() {
  R(n);
  R(k);
  for (int i = 1; i <= n; i++) R(a[i]);
  R(ax), R(ay);
  if (n == 1) {
    printf("%.10f\n", dis(1));
    return 0;
  }
  st = a[k];
  sort(a + 1, a + 1 + n);
  if (k > n) {
    printf("%.10f\n", go(1, n));
    return 0;
  }
  double ans = back(1, n);
  for (int i = 1; i <= n; i++) {
    if (i ^ 1) ans = min(ans, back(1, i - 1) + go(i, n));
    if (i ^ n) ans = min(ans, go(1, i) + back(i + 1, n));
  }
  printf("%.10f\n", ans);
  return 0;
}
