#include <bits/stdc++.h>
using namespace std;
const int oo = 0x3f3f3f3f;
const double eps = 1e-9;
int N, K, X[110000], Y[110000];
double dist(int a, int b) {
  double dx = X[a] - X[b], dy = Y[a] - Y[b];
  return sqrt(dx * dx + dy * dy);
}
double calc(int a, int b, int from) {
  if (a == 0 && b == N - 1) return dist(from, N);
  if (a == 0)
    return dist(from, N) + min(dist(N, b + 1), dist(N, N - 1)) + X[N - 1] -
           X[b + 1];
  if (b == N - 1)
    return dist(from, N) + min(dist(N, 0), dist(N, a - 1)) + X[a - 1] - X[0];
  return dist(from, N) + min(dist(N, 0), dist(N, N - 1)) + X[N - 1] - X[0];
}
int main() {
  scanf("%d%d", &N, &K);
  K--;
  for (int i = (0); i < (N + 1); i++) scanf("%d", &X[i]);
  for (int i = (0); i < (N); i++) Y[i] = 0;
  scanf("%d", &Y[N]);
  int x = X[K];
  sort(X, X + N);
  if (K < N) {
    for (int i = (0); i < (N); i++)
      if (X[i] == x) K = i;
  }
  if (Y[N] == 0) {
    int x1 = oo, x2 = -oo;
    for (int i = (0); i < (N + 1); i++) {
      x1 = min(x1, X[i]);
      x2 = max(x2, X[i]);
    }
    printf("%.8lf\n", double(x2 - x1 + min(X[K] - x1, x2 - X[K])));
    return 0;
  }
  if (K < N) {
    double res = DBL_MAX;
    for (int i = (0); i < (N); i++) {
      int a = min(K, i), b = max(K, i);
      res = min(res, abs(X[K] - X[i]) + calc(a, b, i));
      res = min(res, X[K] - X[0] + X[i] - X[0] + calc(0, b, i));
      res = min(res, X[N - 1] - X[K] + X[N - 1] - X[i] + calc(a, N - 1, i));
      res = min(res, abs(X[i] - X[K]) + X[i] - X[0] + calc(0, max(K, i), 0));
      res = min(res, abs(X[i] - X[K]) + X[N - 1] - X[i] +
                         calc(min(K, i), N - 1, N - 1));
    }
    printf("%.8lf\n", res);
  } else {
    double d1 = dist(N, 0), d2 = dist(N, N - 1), d = X[N - 1] - X[0];
    d += min(d1, d2);
    printf("%.8lf\n", d);
  }
  return 0;
}
