#include <bits/stdc++.h>
using namespace std;
struct node {
  int a, t;
} e[200001], z[200001], f[200001];
void read(int &x) {
  x = 0;
  char c = getchar();
  while (!isdigit(c)) c = getchar();
  while (isdigit(c)) {
    x = x * 10 + c - '0';
    c = getchar();
  }
}
bool cmp1(node p, node q) { return p.t < q.t; }
bool cmp2(node p, node q) { return p.t > q.t; }
int main() {
  int n, T;
  read(n);
  read(T);
  for (int i = 1; i <= n; ++i) read(e[i].a);
  for (int i = 1; i <= n; ++i) read(e[i].t);
  int cntz = 0, cntf = 0;
  double sum0 = 0, sum1 = 0;
  int cnt0 = 0, cnt1 = 0;
  long long tot0 = 0, tot1 = 0;
  ;
  for (int i = 1; i <= n; ++i)
    if (e[i].t >= T) {
      z[++cnt0] = e[i];
      sum0 += 1LL * e[i].a * (e[i].t - T);
      tot0 += e[i].a;
    } else {
      f[++cnt1] = e[i];
      sum1 += 1LL * e[i].a * (T - e[i].t);
      tot1 += e[i].a;
    }
  sort(z + 1, z + cnt0 + 1, cmp1);
  sort(f + 1, f + cnt1 + 1, cmp2);
  double ans = 0;
  if (sum0 >= sum1) {
    ans = tot1;
    for (int i = 1; i <= cnt0; ++i)
      if (1.0 * z[i].a * (z[i].t - T) <= sum1) {
        sum1 -= 1.0 * z[i].a * (z[i].t - T);
        ans += z[i].a;
      } else {
        ans += sum1 / (z[i].t - T);
        break;
      }
  } else {
    ans = tot0;
    for (int i = 1; i <= cnt1; ++i)
      if (1.0 * f[i].a * (T - f[i].t) <= sum0) {
        sum0 -= 1.0 * f[i].a * (T - f[i].t);
        ans += f[i].a;
      } else {
        ans += sum0 / (T - f[i].t);
        break;
      }
  }
  printf("%.8lf", ans);
}
