#include <bits/stdc++.h>
using namespace std;
double getAnswer(double N, double W, vector<double>& A) {
  sort(A.begin(), A.end());
  int n = A.size() / 2;
  double optCapacity = W / (3.0 * N);
  if (A[n] >= 2 * optCapacity) {
    if (A[0] >= optCapacity)
      return optCapacity;
    else
      return min(A[n], 2.0 * A[0]) / 2.0;
  } else {
    return min(A[n], 2 * A[0]) / 2.0;
  }
}
int main() {
  double N, W, cap;
  vector<double> capVec;
  scanf("%lf%lf", &N, &W);
  for (int i = 0; i < 2 * N; i++) {
    scanf("%lf", &cap);
    capVec.push_back(cap);
  }
  printf("%.12lf\n", getAnswer(N, W, capVec) * 3.0 * N);
  return 0;
}
