#include <bits/stdc++.h>
using namespace std;
const int tmax = 200005;
int n;
long long T;
double ans;
struct node {
  double a;
  long long t;
  bool operator<(node y) const { return t < y.t; }
};
node data[tmax];
int main() {
  cin >> n >> T;
  int i, l = 1, r = n;
  for (i = 1; i <= n; i++) scanf("%lf", &data[i].a);
  for (i = 1; i <= n; i++) scanf("%I64d", &data[i].t);
  if (n == 1) {
    if (data[1].t == T)
      printf("%.12lf", 1.0 * data[1].a);
    else
      printf("0");
    return 0;
  }
  sort(data + 1, data + 1 + n);
  for (i = 2; i <= n; i++) {
    if (data[i].t >= T && data[i - 1].t <= T) {
      l = i - 1;
      r = i;
      break;
    }
  }
  if (data[l].t > T || data[r].t < T) {
    printf("0");
    return 0;
  }
  while (l >= 1) {
    if (data[l].t == T) {
      ans += data[l].a;
      l--;
    } else
      break;
  }
  while (r <= n) {
    if (data[r].t == T) {
      ans += data[r].a;
      r++;
    } else
      break;
  }
  while (l >= 1 && r <= n) {
    if ((1.0 * (data[l].a * data[l].t + data[r].a * data[r].t)) /
            (1.0 * (data[l].a + data[r].a)) >=
        1.0 * T) {
      ans += data[l].a +
             data[l].a * (1.0 * T - 1.0 * data[l].t) / (1.0 * (data[r].t - T));
      data[r].a -=
          data[l].a * (1.0 * T - 1.0 * data[l].t) / (1.0 * (data[r].t - T));
      l--;
    } else {
      ans += data[r].a +
             data[r].a * (1.0 * data[r].t - 1.0 * T) / (1.0 * (T - data[l].t));
      data[l].a -=
          data[r].a * (1.0 * data[r].t - 1.0 * T) / (1.0 * (T - data[l].t));
      r++;
    }
  }
  printf("%.12lf", ans);
  return 0;
}
