#include <bits/stdc++.h>
using namespace std;
struct yqh {
  int x;
  int bh;
} a[100020];
int K, n;
int X, Y;
double ans;
bool cmp(yqh a, yqh b) { return a.x < b.x; }
double getdis(double x1, double x2, double y1, double y2) {
  return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
void get_ans() {
  double aug =
      min(getdis(X, a[n].x, Y, 0), getdis(X, a[1].x, Y, 0)) + a[n].x - a[1].x;
  printf("%.9lf\n", aug);
  exit(0);
}
double get1(int l, int r) {
  return min(getdis(X, a[l].x, Y, 0), getdis(X, a[r].x, Y, 0)) + a[r].x -
         a[l].x;
}
double get2(int l, int r) {
  return min(fabs(a[l].x - K) + getdis(X, a[r].x, Y, 0),
             fabs(a[r].x - K) + getdis(X, a[l].x, Y, 0)) +
         a[r].x - a[l].x;
}
int main() {
  scanf("%d%d", &n, &K);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i].x);
    a[i].bh = i;
  }
  sort(a + 1, a + 1 + n, cmp);
  scanf("%d%d", &X, &Y);
  if (K == n + 1) {
    get_ans();
  }
  for (int i = 1; i <= n; ++i)
    if (a[i].bh == K) {
      K = a[i].x;
      break;
    }
  ans = get2(1, n);
  for (int i = 1; i <= n; ++i) {
    if (i > 1) ans = min(ans, get1(i, n) + get2(1, i - 1));
    if (i < n) ans = min(ans, get1(1, i) + get2(i + 1, n));
  }
  printf("%.9lf\n", ans);
  return 0;
}
