#include <bits/stdc++.h>
using namespace std;
int x, y;
double dis(double xx) {
  return sqrt(((xx - x) * (xx - x)) + (((double)y) * ((double)y)));
}
double f(vector<int> v) {
  double res = 1e8, sum;
  for (int(i) = 0; (i) < (v.size() - 1); (i)++) {
    sum = abs(v[i] - v.front()) + abs(v[i + 1] - v.back());
    sum += dis(v[i]) + dis(v[i + 1]);
    res = min(res, sum);
  }
  res = min(res, abs(v.front() - v.back()) + dis(v.back()));
  return res;
}
double f2(vector<int> v, int st) {
  double sum, res = 1e8;
  for (int(i) = 0; (i) < (v.size()); (i)++) {
    if (v[i] == st) break;
    sum = 0;
    sum += abs(st - v[i]) + abs(v[i] - v.back());
    sum += dis(v.back());
    if (i != 0) sum += dis(v[i - 1]) + abs(v[i - 1] - v.front());
    res = min(res, sum);
  }
  return res;
}
int main() {
  vector<int> v;
  v.clear();
  int n, k;
  cin >> n >> k;
  for (int(i) = 0; (i) < (n); (i)++) {
    int t;
    scanf("%d", &t);
    v.push_back(t);
  }
  cin >> x >> y;
  double res = 1e8;
  if (k == n + 1) {
    sort((v).begin(), (v).end());
    res = min(dis(v.front()), dis(v.back())) + abs(v.back() - v.front());
  } else {
    int st = v[k - 1];
    sort((v).begin(), (v).end());
    double sum = 0;
    sum = st - v.front();
    vector<int> t;
    t.clear();
    t.push_back(v.front());
    for (int(i) = 0; (i) < (n); (i)++)
      if (v[i] > st) t.push_back(v[i]);
    sum += f(t);
    res = min(res, sum);
    res = min(f2(v, st), res);
    sum = 0;
    sum = v.back() - st;
    t.clear();
    t.push_back(v.back());
    for (int(i) = 0; (i) < (n); (i)++)
      if (v[n - i - 1] < st) t.push_back(v[n - i - 1]);
    sum += f(t);
    res = min(res, sum);
    reverse((v).begin(), (v).end());
    res = min(f2(v, st), res);
  }
  cout << fixed << setprecision(20) << res << endl;
}
