#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
int n, t;
pair<int, double> g[N];
int l, r;
double work1(pair<int, double> p[N]) {
  double res = 0;
  for (int i = l, j = r; i >= 0 && j < n; i--) {
    double tmp1 = g[i].second * 1.0 * (t - g[i].first) / (g[j].first - t);
    double tmp2 = g[j].second * 1.0 * (g[j].first - t) / (t - g[i].first);
    if (tmp1 > g[j].second) {
      res += g[j].second + tmp2;
      g[i].second -= tmp2;
      j++;
      i++;
    } else {
      res += tmp1 + g[i].second;
      g[j].second -= tmp1;
    }
  }
  return res;
}
double work2(pair<int, double> p[N]) {
  double res = 0;
  for (int i = l, j = r; i >= 0 && j < n; j++) {
    double tmp1 = g[i].second * 1.0 * (t - g[i].first) / (g[j].first - t);
    double tmp2 = g[j].second * 1.0 * (g[j].first - t) / (t - g[i].first);
    if (tmp2 > g[i].second) {
      res += g[i].second + tmp1;
      g[j].second -= tmp1;
      j--;
      i--;
    } else {
      res += tmp2 + g[j].second;
      g[i].second -= tmp2;
    }
  }
  return res;
}
void solve() {
  scanf("%d%d", &n, &t);
  for (int i = 0; i < n; i++) scanf("%lf", &g[i].second);
  for (int i = 0; i < n; i++) scanf("%d", &g[i].first);
  sort(g, g + n);
  l = 0;
  while (l < n && g[l].first < t) l++;
  l--;
  r = n - 1;
  while (r >= 0 && g[r].first > t) r--;
  r++;
  if (l == n - 1 || r == 0) {
    printf("%.15lf\n", 0);
    return;
  }
  double res = max(work1(g), work2(g));
  for (int i = l + 1; i < r; i++) res += g[i].second;
  printf("%.15lf\n", res);
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int T = 1;
  while (T--) solve();
  return 0;
}
