#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using vi = vector<int>;
using vll = vector<ll>;
using pill = pair<int, ll>;
using vvi = vector<vi>;
ll gcd(ll a, ll b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
ll fast_exp(ll base, ll n, ll m) {
  if (n == 0) return 1;
  ll t = fast_exp(base, n / 2, m);
  if (n % 2 == 0)
    return (t * t) % m;
  else
    return (((t * t) % m) * base) % m;
}
int const N = 1e6;
ll mf[N + 1];
int main() {
  ios::sync_with_stdio(false);
  int n, T;
  cin >> n >> T;
  vi a(n + 1, 0);
  for (int i = 1; i <= n; ++i) cin >> a[i];
  for (int j = 1; j <= n; ++j) {
    int t;
    cin >> t;
    mf[t] += a[j];
  }
  double ans = mf[T];
  ll pos = 0, pc = 0;
  for (int i = T + 1; i <= N; ++i) pos += mf[i] * (i - T), pc += mf[i];
  ll neg = 0, nc = 0;
  for (int i = T - 1; i > 0; --i) neg += mf[i] * (T - i), nc += mf[i];
  if (pos < neg) {
    ans += pc;
    double f = 0, c = 0;
    for (int i = T - 1; i > 0; --i) {
      if (c >= pos) break;
      double d = min((double)mf[i], (pos - c) / static_cast<double>(T - i));
      ans += d;
      c += (T - i) * d;
    }
  } else {
    ans += nc;
    double f = 0, c = 0;
    for (int i = T + 1; i <= N; ++i) {
      if (c >= neg) break;
      double d = min((double)mf[i], (neg - c) / static_cast<double>(i - T));
      ans += d;
      c += (i - T) * d;
    }
  }
  printf("%.20f\n", ans);
  return 0;
}
