#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
long long powmod(long long a, long long b, long long MOD) {
  a %= MOD;
  if (a == 0ll) {
    return 0ll;
  }
  long long ans = 1;
  while (b) {
    if (b & 1) {
      ans = ans * a % MOD;
    }
    a = a * a % MOD;
    b >>= 1;
  }
  return ans;
}
void Pv(const vector<int>& V) {
  int Len = int(V.size());
  for (int i = 0; i < Len; ++i) {
    printf("%d", V[i]);
    if (i != Len - 1) {
      printf(" ");
    } else {
      printf("\n");
    }
  }
}
void Pvl(const vector<long long>& V) {
  int Len = int(V.size());
  for (int i = 0; i < Len; ++i) {
    printf("%lld", V[i]);
    if (i != Len - 1) {
      printf(" ");
    } else {
      printf("\n");
    }
  }
}
inline void getInt(int* p);
const int maxn = 1000010;
const int inf = 0x3f3f3f3f;
struct node {
  long double x, t;
} a[maxn];
int n;
long double T;
std::vector<node> v1, v0;
bool cmp1(node aa, node bb) { return aa.t < bb.t; }
bool cmp2(node aa, node bb) { return aa.t > bb.t; }
long double ans;
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> T;
  for (int i = 1; i <= n; i++) {
    cin >> a[i].x;
  }
  for (int i = 1; i <= n; i++) {
    cin >> a[i].t;
  }
  long double sum0 = 0.0;
  long double sum1 = 0.0;
  long double tot0 = 0.0;
  long double tot1 = 0.0;
  for (int i = 1; i <= n; i++) {
    if (a[i].t >= T) {
      tot0 += a[i].x;
      sum0 += a[i].x * (a[i].t - T);
      v0.push_back(a[i]);
    } else {
      tot1 += a[i].x;
      sum1 += a[i].x * (T - a[i].t);
      v1.push_back(a[i]);
    }
  }
  if (sum0 >= sum1) {
    ans = tot1;
    sort((v0).begin(), (v0).end(), cmp1);
    int len = int(v0.size());
    for (int i = 0; i < len; ++i) {
      if (v0[i].x * (v0[i].t - T) <= sum1) {
        sum1 -= v0[i].x * (v0[i].t - T);
        ans += v0[i].x;
      } else {
        ans += (sum1) / (v0[i].t - T);
        break;
      }
    }
  } else {
    ans = tot0;
    sort((v1).begin(), (v1).end(), cmp2);
    int len = int(v1.size());
    for (int i = 0; i < len; ++i) {
      if (v1[i].x * (T - v1[i].t) <= sum0) {
        sum0 -= v1[i].x * (T - v1[i].t);
        ans += v1[i].x;
      } else {
        ans += (sum0) / (T - v1[i].t);
        break;
      }
    }
  }
  cout << fixed << setprecision(7) << ans << endl;
  return 0;
}
inline void getInt(int* p) {
  char ch;
  do {
    ch = getchar();
  } while (ch == ' ' || ch == '\n');
  if (ch == '-') {
    *p = -(getchar() - '0');
    while ((ch = getchar()) >= '0' && ch <= '9') {
      *p = *p * 10 - ch + '0';
    }
  } else {
    *p = ch - '0';
    while ((ch = getchar()) >= '0' && ch <= '9') {
      *p = *p * 10 + ch - '0';
    }
  }
}
