#include <bits/stdc++.h>
using namespace std;
int Gcd(int a, int b) {
  if (b == 0) return a;
  return Gcd(b, a % b);
}
int Lcm(int a, int b) { return a / Gcd(a, b) * b; }
inline int read() {
  int f = 1, x = 0;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') f = -f;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
const int maxn = 1e6 + 10;
const double EPS = 1e-9;
struct node {
  long double a, t;
} p[maxn];
int dcmp(double a, double b) {
  if (a > b) {
    if (a - b < EPS)
      return 0;
    else
      return 1;
  } else {
    if (b - a < EPS)
      return 0;
    else
      return -1;
  }
}
int cmp(node a, node b) { return a.t < b.t; }
int main() {
  long long n = read(), T = read();
  long double mx = 0, mn = 1e8;
  long double sum1 = 0, sum2 = 0;
  for (int i = 1; i <= n; i++) {
    p[i].a = read();
    sum1 += p[i].a;
  }
  for (int i = 1; i <= n; i++) {
    p[i].t = read();
    sum2 += p[i].a * p[i].t;
    mx = max(p[i].t, mx);
    mn = min(p[i].t, mn);
  }
  sort(p + 1, p + n + 1, cmp);
  if (mx < T || mn > T) {
    puts("0");
    return 0;
  }
  int l = 1, r = n;
  while (l <= r) {
    if (dcmp(sum1 * T, sum2) == 0) {
      printf("%.10Lf\n", sum1);
      return 0;
    } else if (dcmp(sum1 * T, sum2) == 1) {
      sum1 -= p[l].a;
      sum2 -= p[l].a * p[l].t;
      if (dcmp(sum1 * T, sum2) == -1 || dcmp(sum1 * T, sum2) == 0) {
        long double ans = (T * sum1 - sum2) / (p[l].t - T);
        printf("%.10Lf\n", ans + sum1);
        return 0;
      } else {
        l++;
      }
    } else {
      sum1 -= p[r].a;
      sum2 -= p[r].a * p[r].t;
      if (dcmp(sum1 * T, sum2) == 1 || dcmp(sum1 * T, sum2) == 0) {
        long double ans = (T * sum1 - sum2) / (p[r].t - T);
        printf("%.10Lf\n", ans + sum1);
        return 0;
      } else {
        r--;
      }
    }
  }
  return 0;
}
