#include <bits/stdc++.h>
using namespace std;
vector<long long> water;
vector<long long> tempa;
vector<pair<long long, long long>> num;
int nsize = 0, t = 0;
double eps = 0.00000001;
bool chk(double cur) {
  double curwater = 0;
  double maxsum = 0;
  double minsum = 0;
  int i = nsize - 1;
  while (i >= 0) {
    if (curwater + num[i].second >= cur) {
      double temp = curwater;
      curwater = cur;
      maxsum += (cur - temp) * num[i].first;
      break;
    } else {
      curwater += num[i].second;
      maxsum += num[i].first * num[i].second;
    }
    i--;
  }
  curwater = 0;
  i = 0;
  while (i < nsize) {
    if (curwater + num[i].second >= cur) {
      double temp = curwater;
      curwater = cur;
      minsum += (cur - temp) * num[i].first;
      break;
    } else {
      curwater += num[i].second;
      minsum += num[i].first * num[i].second;
    }
    i++;
  }
  if (maxsum / cur + eps >= t && minsum / cur - eps <= t) return true;
  return false;
}
int main() {
  scanf("%d %d", &nsize, &t);
  int i = 0;
  while (i < nsize) {
    long long number = 0;
    scanf("%lld", &number);
    water.push_back(number);
    i++;
  }
  i = 0;
  while (i < nsize) {
    long long number = 0;
    scanf("%lld", &number);
    tempa.push_back(number);
    i++;
  }
  double r = 0.0;
  i = 0;
  while (i < nsize) {
    num.push_back(make_pair(tempa[i], water[i]));
    r += water[i];
    i++;
  }
  sort(num.begin(), num.end());
  double l = 0.0;
  double mid = (l + r) / 2;
  i = 0;
  while (i < 100) {
    mid = (l + r) / 2;
    if (chk(mid))
      l = mid;
    else
      r = mid;
    i++;
  }
  printf("%.8lf\n", l);
  return 0;
}
