#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
long double a[N], tt[N];
struct ver {
  int id;
  long double t;
  bool operator<(ver q) const { return t < q.t; }
};
struct ver1 {
  int id;
  long double t;
  bool operator<(ver1 q) const { return t > q.t; }
};
int main() {
  std::ios::sync_with_stdio(0);
  long double T, k, t1, t2, t3;
  int i, j, n;
  cin >> n >> T;
  t1 = 0;
  t2 = 0;
  priority_queue<ver> pq;
  priority_queue<ver1> pq1;
  for (i = 0; i < n; i++) {
    cin >> a[i];
    t2 += a[i];
  }
  for (i = 0; i < n; i++) {
    cin >> tt[i];
    t1 += tt[i] * a[i];
    pq.push({i, tt[i]});
    pq1.push({i, tt[i]});
  }
  if (t1 == t2 * T) {
    cout << setprecision(9) << t2;
    return 0;
  }
  if (t1 > t2 * T) {
    while (t1 > t2 * T) {
      ver temp = pq.top();
      pq.pop();
      long double t7 = (T * t2 - t1) / (T - tt[temp.id]);
      long double t6 = min((a[temp.id] * 1.0), t7);
      t1 -= t6 * tt[temp.id];
      t2 -= t6;
    }
    cout << setprecision(9) << t2;
    return 0;
  } else {
    while (t1 < t2 * T) {
      ver1 temp = pq1.top();
      pq1.pop();
      long double t7 = (T * t2 - t1) / (T - tt[temp.id]);
      long double t6 = min(a[temp.id] * (1.0), t7);
      t1 -= t6 * tt[temp.id];
      t2 -= t6;
    }
    cout << setprecision(9) << t2;
    return 0;
  }
}
