#include <bits/stdc++.h>
using namespace std;
struct Tap {
  int a, t;
  bool operator<(const Tap& o) const { return t > o.t; }
};
const int maxn = 2e5 + 10;
const double eps = 1e-10;
Tap taps[maxn];
int n, T, a, t;
double l, r;
int cmp(double x) {
  if (x < -eps) {
    return -1;
  }
  return x > eps;
}
bool ok(double sum) {
  double s = sum;
  double p = sum * T;
  double lb = 0, ub = 0;
  for (int i = 1; i <= n; i++) {
    double a = taps[i].a;
    double t = taps[i].t;
    if (cmp(sum - a) >= 0) {
      sum -= a;
      ub += a * t;
    } else {
      ub += sum * t;
      break;
    }
  }
  sum = s;
  for (int i = n; i >= 1; i--) {
    double a = taps[i].a;
    double t = taps[i].t;
    if (cmp(sum - a) >= 0) {
      sum -= a;
      lb += a * t;
    } else {
      lb += sum * t;
      break;
    }
  }
  return cmp(ub - p) >= 0 && cmp(p - lb) >= 0;
}
int main() {
  ios::sync_with_stdio(false);
  cout.tie(0);
  cin.tie(0);
  cin >> n >> T;
  for (int i = 1; i <= n; i++) {
    cin >> taps[i].a;
    r += taps[i].a;
  }
  for (int i = 1; i <= n; i++) {
    cin >> taps[i].t;
  }
  sort(taps + 1, taps + n + 1);
  l = eps;
  for (int i = 1; i <= 100; i++) {
    double mid = (l + r) / 2;
    if (true == ok(mid)) {
      l = mid;
    } else {
      r = mid;
    }
  }
  cout << setprecision(15) << fixed;
  cout << l << endl;
  return 0;
}
