#include <bits/stdc++.h>
using namespace std;
const long double INF = 1e9;
const long double EPS = 1e-9;
long double dist(long double x1, long double y1, long double x2,
                 long double y2) {
  return sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
}
long double func(long double X, long double Y, long double L, long double R) {
  return min(dist(L, 0, X, Y), dist(R, 0, X, Y)) + R - L;
}
int main() {
  cout.setf(ios::fixed);
  cout.precision(15);
  int n, k;
  cin >> n >> k;
  k--;
  vector<int> x(n);
  for (int i = 0; i < n; i++) cin >> x[i];
  int X, Y;
  cin >> X >> Y;
  int xStart;
  if (k < n) xStart = x[k];
  sort(x.begin(), x.end());
  if (k == n) {
    cout << func(X, Y, x[0], x[n - 1]);
    return 0;
  }
  k = lower_bound(x.begin(), x.end(), xStart) - x.begin();
  long double ans = INF;
  for (int i = 0; i < n; i++) {
    long double cur1 =
        min(x[k] - x[0] + x[i] - x[0] + dist(x[i], 0, X, Y),
            abs(x[i] - x[k]) + x[i] - x[0] + dist(x[0], 0, X, Y));
    if (i + 1 < n) cur1 += func(X, Y, x[i + 1], x[n - 1]);
    long double cur2 =
        min(x[n - 1] - x[k] + x[n - 1] - x[i] + dist(x[i], 0, X, Y),
            abs(x[k] - x[i]) + x[n - 1] - x[i] + dist(x[n - 1], 0, X, Y));
    if (i - 1 >= 0) cur2 += func(X, Y, x[0], x[i - 1]);
    ans = min(ans, min(cur1, cur2));
  }
  cout << ans << '\n';
  return 0;
}
