#include <bits/stdc++.h>
using namespace std;
const int maxn = 110000;
int n, K, A[maxn], Px, Py;
inline double sqr(int x) { return (double)x * x; }
namespace Ninit {
void init() {
  int i, _x;
  scanf("%d%d", &n, &K), --K;
  for (i = 0; i < n; ++i) scanf("%d", A + i);
  scanf("%d%d", &Px, &Py);
  _x = A[K], sort(A, A + n);
  if (K == n) return;
  for (K = 0; K < n; ++K)
    if (A[K] == _x) break;
}
}  // namespace Ninit
namespace Nsolve {
double ans;
inline double dist(int x) { return sqrt(sqr(Px - A[x]) + sqr(Py)); }
inline double Fu(int l, int r) {
  return min(dist(l) + A[r] - A[K], dist(r) + A[K] - A[l]) + A[r] - A[l];
}
inline double Fd(int l, int r) { return min(dist(l), dist(r)) + A[r] - A[l]; }
void solve() {
  if (n == K) return printf("%.7lf\n", Fd(0, n - 1)), void();
  int i;
  ans = Fu(0, n - 1);
  for (i = 0; i < n - 1; ++i)
    if (K <= i) ans = min(ans, Fu(0, i) + Fd(i + 1, n - 1));
  for (i = 1; i < n; ++i)
    if (i <= K) ans = min(ans, Fd(0, i - 1) + Fu(i, n - 1));
  printf("%.7lf\n", ans);
}
}  // namespace Nsolve
int main() {
  Ninit::init();
  Nsolve::solve();
  return 0;
}
