#include <bits/stdc++.h>
using namespace std;
bool db = false;
const long double INF = 1e18 + 1;
const long double EPS = 1e-10;
const long long maxn = 2 * 1e5;
long long N, T;
pair<long double, long double> in[maxn];
long double a[maxn];
long double t[maxn];
long double ans = 0;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> N >> T;
  long double ldT = T;
  ans = 0.0;
  for (int i = 0; i < N; i++) {
    cin >> in[i].second;
  }
  for (int i = 0; i < N; i++) {
    cin >> in[i].first;
    if (in[i].first == T) ans += in[i].second;
  }
  sort(in, in + N);
  vector<pair<long double, long double> > hots;
  vector<pair<long double, long double> > colds;
  for (int i = 0; i < N; i++) {
    if (in[i].first > ldT) {
      auto ta = in[i];
      ta.first = ta.first - ldT;
      hots.push_back(ta);
    } else if (in[i].first < ldT) {
      auto ta = in[i];
      ta.first = ldT - ta.first;
      colds.push_back(ta);
    }
  }
  if (hots.size() == 0 or colds.size() == 0) {
    cout << ans << endl;
    return 0;
  }
  reverse(colds.begin(), colds.end());
  hots.insert(hots.begin(), {0.0, 0.0});
  colds.insert(colds.begin(), {0.0, 0.0});
  vector<long double> cs_a_hots(hots.size(), 0.0);
  vector<long double> cs_a_colds(colds.size(), 0.0);
  vector<long double> cs_e_hots(hots.size(), 0.0);
  vector<long double> cs_e_colds(colds.size(), 0.0);
  for (int i = 0; i < hots.size(); i++) {
    cs_e_hots[i] = hots[i].first * hots[i].second;
    if (i) cs_e_hots[i] += cs_e_hots[i - 1];
    cs_a_hots[i] = hots[i].second;
    if (i) cs_a_hots[i] += cs_a_hots[i - 1];
  }
  for (int i = 0; i < colds.size(); i++) {
    cs_e_colds[i] = colds[i].first * colds[i].second;
    if (i) cs_e_colds[i] += cs_e_colds[i - 1];
    cs_a_colds[i] = colds[i].second;
    if (i) cs_a_colds[i] += cs_a_colds[i - 1];
  }
  long double hot_e_sum_ss = 0.0;
  long double hot_litres_sum = 0.0;
  long double hot_litres_extra = 0.0;
  long double cold_litres_sum = 0.0;
  long double cold_litres_extra = 0.0;
  int cidx = 0;
  int cidx_snapshot = -1;
  int cs_e_colds_sz = cs_e_colds.size();
  long double L;
  long double R;
  long double M;
  long double extra_ans = 0.0;
  for (int i = 1; i < hots.size(); i++) {
    auto [t, a] = hots[i];
    long double tans = 0.0;
    long double hot_e_sum__prefix = cs_e_hots[i - 1];
    long long hot_e_sum__full = cs_e_hots[i];
    int cold_idx =
        lower_bound(cs_e_colds.begin(), cs_e_colds.end(), hot_e_sum__full) -
        cs_e_colds.begin();
    if (cold_idx != cs_e_colds_sz) {
      if (i == hots.size() - 1) {
        hot_litres_sum = cs_a_hots[i];
        hot_litres_extra = 0.0;
        cidx = cold_idx;
        cold_litres_sum = cs_a_colds[cidx - 1];
        cold_litres_extra = 0;
        long double cold_energy_extra =
            (hot_e_sum__full - cs_e_colds[cidx - 1]);
        cold_litres_extra = (cold_energy_extra / colds[cidx].first);
        tans = hot_litres_sum + hot_litres_extra + cold_litres_sum +
               cold_litres_extra;
        extra_ans = max(extra_ans, tans);
        break;
      }
      continue;
    }
    cold_idx =
        lower_bound(cs_e_colds.begin(), cs_e_colds.end(), hot_e_sum__prefix) -
        cs_e_colds.begin();
    assert(cold_idx != cs_e_colds_sz);
    hot_e_sum_ss = hot_e_sum__prefix + 0.0;
    hot_litres_sum = cs_a_hots[i - 1];
    hot_litres_extra = 0.0;
    L = 0.0;
    R = a;
    M;
    while (R - L > EPS) {
      M = (L + R) / 2;
      long double hot_e_sum_with_fraction = hot_e_sum__prefix;
      hot_e_sum_with_fraction += (M * t);
      cidx = lower_bound(cs_e_colds.begin(), cs_e_colds.end(),
                         hot_e_sum_with_fraction) -
             cs_e_colds.begin();
      if (cidx != cs_e_colds_sz) {
        L = M;
        cidx_snapshot = cidx;
        hot_litres_extra = L;
        hot_e_sum_ss = hot_e_sum_with_fraction;
      } else {
        R = M;
      }
    }
    tans = 0.0;
    cidx = cidx_snapshot;
    cold_litres_sum = cs_a_colds[cidx - 1];
    cold_litres_extra = 0;
    long double cold_energy_extra = (hot_e_sum_ss - cs_e_colds[cidx - 1]);
    cold_litres_extra = (cold_energy_extra / colds[cidx].first);
    tans =
        hot_litres_sum + hot_litres_extra + cold_litres_sum + cold_litres_extra;
    extra_ans = max(extra_ans, tans);
    break;
  }
  ans += extra_ans;
  cout << setprecision(12) << ans << endl;
  return 0;
}
