#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using P = pair<int, int>;
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("Ofast")
constexpr ll INF = 1e12;
constexpr int inf = 1e9;
constexpr ll mod = 1000000007;
constexpr ll mod2 = 998244353;
const double PI = 3.1415926535897932384626433832795028841971;
const int dx[6] = {1, 0, -1, 0, 1, 1};
const int dy[6] = {0, 1, 0, -1, 1, -1};
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
using pll = pair<ll, ll>;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int N, T;
  cin >> N >> T;
  vector<pll> suzu(N);
  for (int i = 0; i < N; i++) {
    cin >> suzu[i].second;
  }
  ll mn = inf, mx = 0;
  for (int i = 0; i < N; i++) {
    cin >> suzu[i].first;
    chmin(mn, suzu[i].first);
    chmax(mx, suzu[i].first);
  }
  if (!(mn <= T and T <= mx)) {
    cout << 0 << "\n";
    return 0;
  }
  long double sum = 0;
  long double sum_w = 0;
  for (int i = 0; i < N; i++) {
    sum += suzu[i].first * suzu[i].second;
    sum_w += suzu[i].second;
  }
  long double ave = sum / sum_w;
  if (ave <= T) {
    sort(suzu.begin(), suzu.end());
    for (int i = 0; i < N; i++) {
      long double temp_sum = sum - suzu[i].first * suzu[i].second;
      long double temp_w = sum_w - suzu[i].second;
      if (i + 1 != N) {
        temp_sum /= temp_w;
      }
      if (i + 1 == N or T <= temp_sum) {
        long double low = 0, high = suzu[i].second;
        int cnt = 100;
        while (cnt--) {
          long double mid = (low + high) / 2;
          long double average = (sum - mid * suzu[i].first) / (sum_w - mid);
          if (T <= average) {
            high = mid;
          } else {
            low = mid;
          }
        }
        sum_w -= low;
        break;
      }
      sum -= suzu[i].first * suzu[i].second;
      sum_w -= suzu[i].second;
    }
  } else {
    sort(suzu.rbegin(), suzu.rend());
    for (int i = 0; i < N; i++) {
      long double temp_sum = sum - suzu[i].first * suzu[i].second;
      long double temp_w = sum_w - suzu[i].second;
      temp_sum /= temp_w;
      if (T >= temp_sum) {
        long double low = 0, high = suzu[i].second;
        int cnt = 100;
        while (cnt--) {
          long double mid = (low + high) / 2;
          long double average = (sum - mid * suzu[i].first) / (sum_w - mid);
          if (T >= average) {
            high = mid;
          } else {
            low = mid;
          }
        }
        sum_w -= low;
        break;
      }
      sum -= suzu[i].first * suzu[i].second;
      sum_w -= suzu[i].second;
    }
  }
  cout << fixed << setprecision(10) << sum_w << "\n";
  return 0;
}
