#include <bits/stdc++.h>
long long n, T;
struct node {
  long long A, T;
} ns[200200];
double ans;
int main() {
  scanf("%lld%lld", &n, &T);
  for (long long i = 1; i <= n; ++i) scanf("%lld", &ns[i].A);
  for (long long i = 1; i <= n; ++i) scanf("%lld", &ns[i].T);
  for (long long i = 1; i <= n; ++i) {
    if (ns[i].T == T)
      ans += ns[i].A;
    else if (ns[i].T < T)
      ns[n + 1].A += ns[i].A, ns[n + 1].T += ns[i].A * (T - ns[i].T);
    else
      ns[n + 2].A += ns[i].A, ns[n + 2].T += ns[i].A * (ns[i].T - T);
  }
  if (ns[n + 1].A == 0 || ns[n + 2].A == 0) {
    printf("%.15lf\n", ans);
    return 0;
  }
  if (ns[n + 1].T == ns[n + 2].T) {
    printf("%.15lf\n", ans + ns[n + 1].A + ns[n + 2].A);
    return 0;
  }
  std::sort(ns + 1, ns + 1 + n,
            [](const node& a, const node& b) { return a.T < b.T; });
  if (ns[n + 1].T <= ns[n + 2].T) {
    ans += ns[n + 1].A;
    long long pos = 0;
    for (long long i = 1; i <= n; ++i) {
      if (ns[i].T > T) {
        pos = i;
        break;
      }
    }
    while (pos <= n && ns[n + 1].T) {
      if (ns[n + 1].T > ns[pos].A * (ns[pos].T - T)) {
        ans += ns[pos].A;
        ns[n + 1].T -= ns[pos].A * (ns[pos].T - T);
        ++pos;
      } else {
        ans += double(ns[n + 1].T) / (ns[pos].T - T);
        break;
      }
    }
  } else {
    ans += ns[n + 2].A;
    long long pos = 0;
    for (long long i = n; i; --i) {
      if (ns[i].T < T) {
        pos = i;
        break;
      }
    }
    while (pos && ns[n + 2].T) {
      if (ns[n + 2].T > ns[pos].A * (T - ns[pos].T)) {
        ans += ns[pos].A;
        ns[n + 2].T -= ns[pos].A * (T - ns[pos].T);
        --pos;
      } else {
        ans += double(ns[n + 2].T) / (T - ns[pos].T);
        break;
      }
    }
  }
  printf("%.15lf\n", ans);
}
