#include <bits/stdc++.h>
using namespace std;
bool comp(pair<long long, long long> p1, pair<long long, long long> p2) {
  return p1.second < p2.second;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long n, T;
  cin >> n >> T;
  vector<long long> a(n);
  vector<long long> t(n);
  long long sum = 0;
  for (long long i = 0; i < n; i++) {
    cin >> a[i];
    sum += a[i];
  }
  for (long long i = 0; i < n; i++) cin >> t[i];
  vector<pair<long long, long long> > lef;
  vector<pair<long long, long long> > righ;
  long long leftside = 0, rightside = 0;
  long double ans = 0;
  long long sumr = 0, suml = 0;
  for (long long i = 0; i < n; i++) {
    if (t[i] == T) {
      ans = ans + a[i];
      continue;
    }
    if (t[i] < T) {
      long long val = T - t[i];
      righ.push_back(make_pair(i, val));
      rightside += a[i] * val;
      sumr += a[i];
    }
    if (t[i] > T) {
      long long val = t[i] - T;
      lef.push_back(make_pair(i, val));
      leftside += a[i] * val;
      suml += a[i];
    }
  }
  if (leftside == rightside) {
    cout << sum << endl;
    return 0;
  }
  sort(lef.begin(), lef.end(), comp);
  sort(righ.begin(), righ.end(), comp);
  long double req = 0;
  if (leftside < rightside) {
    ans += suml;
    long double rem = leftside;
    for (long long i = 0; i < righ.size(); i++) {
      if (a[righ[i].first] * righ[i].second - rem >= 0) {
        req += (rem + 0.0) / righ[i].second;
        rem = 0;
        break;
      } else {
        req += a[righ[i].first];
        rem -= a[righ[i].first] * righ[i].second;
      }
    }
  }
  if (leftside > rightside) {
    ans += sumr;
    long double rem = rightside;
    for (long long i = 0; i < lef.size(); i++) {
      if (a[lef[i].first] * lef[i].second - rem >= 0) {
        req += (rem + 0.0) / lef[i].second;
        rem = 0;
        break;
      } else {
        req += a[lef[i].first];
        rem -= a[lef[i].first] * lef[i].second;
      }
    }
  }
  ans += req;
  cout << setprecision(20) << ans << endl;
}
