#include <bits/stdc++.h>
using namespace std;
inline void read(int &x) {
  char ch;
  bool flag = false;
  for (ch = getchar(); !isdigit(ch); ch = getchar())
    if (ch == '-') flag = true;
  for (x = 0; isdigit(ch); x = x * 10 + ch - '0', ch = getchar())
    ;
  x = flag ? -x : x;
}
inline void write(int x) {
  static const int maxlen = 100;
  static char s[maxlen];
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (!x) {
    putchar('0');
    return;
  }
  int len = 0;
  for (; x; x /= 10) s[len++] = x % 10 + '0';
  for (int i = len - 1; i >= 0; --i) putchar(s[i]);
}
int n, aim;
struct zy {
  int v, t;
} a[1510000], MIN[1510000], MAX[1510000];
int cnt_MIN, cnt_MAX;
bool cmp_MIN(zy A, zy B) { return A.t > B.t; }
bool cmp_MAX(zy A, zy B) { return A.t < B.t; }
long long lim;
double sum = 0;
int main() {
  read(n);
  read(aim);
  for (int i = 1; i <= n; i++) read(a[i].v);
  for (int i = 1; i <= n; i++) read(a[i].t);
  long long tot1 = 0, tot2 = 0;
  for (int i = 1; i <= n; i++)
    if (a[i].t < aim) {
      tot1 += 1ll * (aim - a[i].t) * a[i].v;
      MIN[++cnt_MIN] = a[i];
    } else if (a[i].t > aim) {
      tot2 += 1ll * (a[i].t - aim) * a[i].v;
      MAX[++cnt_MAX] = a[i];
    } else
      sum += a[i].v;
  lim = min(tot1, tot2);
  sort(MIN + 1, MIN + cnt_MIN + 1, cmp_MIN);
  sort(MAX + 1, MAX + cnt_MAX + 1, cmp_MAX);
  tot1 = tot2 = 0;
  long long tot = 0;
  for (int i = 1; i <= cnt_MIN; i++) {
    if (tot + 1ll * (aim - MIN[i].t) * MIN[i].v <= lim) {
      sum += MIN[i].v;
      tot += 1ll * (aim - MIN[i].t) * MIN[i].v;
    } else {
      sum += 1.0 * (lim - tot) / abs(aim - MIN[i].t);
      break;
    }
  }
  tot = 0;
  for (int i = 1; i <= cnt_MAX; i++) {
    if (tot + 1ll * (MAX[i].t - aim) * MAX[i].v <= lim) {
      sum += MAX[i].v;
      tot += 1ll * (MAX[i].t - aim) * MAX[i].v;
    } else {
      sum += 1.0 * (lim - tot) / abs(MAX[i].t - aim);
      break;
    }
  }
  printf("%.7f\n", sum);
  return 0;
}
