// in the name of Allah

#include <bits/stdc++.h>

#define eps 1e-12

using namespace std;

int n, T;
pair <int, int> a[200002];

bool can(long double m) {
	long double val = m * T;
	long double b[n];
	for(int i=0; i<n; i++) b[i] = 0.0;
	for(int i=0; i<n; i++) {
		long double foo = val / a[i].first;
		long double bar = min(foo, (long double) (a[i].second));
		m -= bar;
		b[i] = bar;
		val -= bar * a[i].first;
		if(val < eps) break;
	}
	if(val > eps) return 0;
	if(m > -1e-9) {
		int up = 0, dw = n - 1;
		while(m > eps) {
			if(up >= dw) return 0;
			else if(a[up].first == a[dw].first) return 0;
			else {
				long double rem1 = b[up];
				long double rem2 = a[dw].second - b[dw];
				long double t1 = a[up].first;
				long double t2 = a[dw].first;
				long double x = min(rem2 * t2 / t1, rem1);
				long double y = x * t1 / t2;
				m += x;
				m -= y;
				b[up] -= x;
				b[dw] += y;
				if(abs(a[dw].second - b[dw]) < eps) dw--;
				if(b[up] < eps) up++;
			}
		}
		return 1;
	}
	return 0;
}

int main() {
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> n >> T;
	long long sum = 0;
	for(int i=0; i<n; i++) {
		cin >> a[i].second;
		sum += a[i].second;
	}
	for(int i=0; i<n; i++) cin >> a[i].first;
	sort(a, a+n);
	reverse(a, a+n);
	if(a[0].first < T || T < a[n-1].first) {
		cout << 0 << endl;
		return 0;
	}
	long double L = 0, R = sum;
	while(R - L > 1e-8) {
		long double m = (R+L) / 2.0;
		if(can(m)) L = m;
		else R = m;
	}
	cout << fixed << setprecision(7) << (L+R)/2.0;
	return 0;
}


// in the name of Allah

#include <bits/stdc++.h>

using namespace std;

int n, T;
pair <int, int> a[200002];

bool can(long double m) {
	long double val = m * T;
	long double b[n];
	for(int i=0; i<n; i++) b[i] = 0;
	for(int i=0; i<n; i++) {
		long double foo = val / a[i].first;
		long double bar = min(foo, (long double) (a[i].second));
		m -= bar;
		b[i] = bar;
		val -= bar * a[i].first;
		if(abs(val) < 1e-9) break;
	}
	if(val > 1e-9) return 0;
	if(abs(val) < 1e-9 && m > -1e-9) {
		int up = 0, dw = n - 1;
		while(m > 1e-9) {
			if(up > dw) return 0;
			else if(up == dw) {
				if(abs(T - a[up].first) < 1e-9) {
					long double rem = a[up].second - b[up];
					m -= max(rem, 0.0);
					if(m > 1e-9) return 0;
					return 1;
				}
				return 0;
			}
			else {
				long double rem1 = b[up];
				long double rem2 = a[dw].second - b[dw];
				long double t1 = a[up].first;
				long double t2 = a[dw].first;
				long double x = min(rem2 * t2 / t1, rem1);
				long double y = x * t1 / t2;
				m += x;
				m -= y;
				b[up] -= x;
				b[dw] += y;
				if(abs(a[dw].second - b[dw]) < 1e-9) dw--;
				if(b[up] < 1e-9) up++;
			}
		}
		return 1;
	}
	return 0;
}

int main() {
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> n >> T;
	for(int i=0; i<n; i++) cin >> a[i].second;
	for(int i=0; i<n; i++) cin >> a[i].first;
	sort(a, a+n);
	reverse(a, a+n);
	if(a[0].first < T) {
		cout << 0 << endl;
		return 0;
	}
	long double L = 0, R = 1e18;
	while(R - L > 1e-8) {
		long double m = (R+L) / 2.0;
		if(can(m)) L = m;
		else R = m;
	}
	cout << fixed << setprecision(13) << (L+R)/2.0;
	return 0;
}


/*In Case of TLE -> 1.Use Int instead of Long Long
                    2.Use FastIO
                    3.Use "\n" Instead of endl
                    4.Use Vector and Arrays instead of Sets,Maps(if possible)
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> //required
#include <ext/pb_ds/tree_policy.hpp> //required
#define pb push_back
#define pf push_front
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define distinct(x) sort(all(x)); x.resize(unique(all(x))-x.begin());
#define sz(x)  (long long)(x).size()
#define sqr(x) (x)*(x)
#define sof sizeof
#define resz resize
#define ins insert
#define lowerB lower_bound
#define upperB upper_bound
#define mkp make_pair
#define mkt make_tuple
#define act(a,v) (get<(long long)a>(v))
#define mod 1000000007
#define mod1 998244353
#define N 1000003  //N idhar hai
#define inf 1e18
#define minf -1e18
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) >= (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define FastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define PRECISION(n) std::cout.unsetf ( std::ios::floatfield );std::cout.precision((ll)n)
#define getsm(v) accumulate(all(v),(ll)0)
#define getmx(v) max_element(all(v))
#define getmn(v) min_element(all(v))
#define wr1(a) cout<<(a)<<endl
#define wr2(a,b) cout<<(a)<<" "<<(b)<<endl
#define wr3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<endl
#define ww1(a) cout<<(a)<<"\n"
#define ww2(a,b) cout<<(a)<<" "<<(b)<<"\n"
#define ww3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<"\n"
#define FileIO freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
#define call(dr) dr.pb(mkp(1,0));dr.pb(mkp(-1,0));dr.pb(mkp(0,1));dr.pb(mkp(0,-1))
#define fill(dp,a,b) for(int i=0;i<a;i++)for(int j=0;j<b;j++)dp[i][j]=-1;
#define PI M_PI
#define fi first
#define se second
#define here cout<<"RSSB"<<endl
#define showzero cout<<std::showpoint
#define bitcount( x ) __builtin_popcountll( x )
#define ls(i) (1ll<<(i))
#define rs(i) ((i)>>1)
#define br "\n"
//#define sp " "
using namespace __gnu_pbds; //required
using namespace  std ;
typedef double db;
typedef long long ll ;
typedef vector<int>vi ;
//typedef vector<l>vl ;
typedef vector<ll>vll ;
typedef vector<vector<ll> >vvl ;
typedef pair<int,int> pii ;
typedef pair<ll,ll> pll ;
typedef vector<pll>vpll;
typedef vector<string>vstr;
typedef vector<bool>vbool ;
template <typename T> using ordered_set =  tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void READ(vll &v, ll n){ll a ;for(ll i=0 ; i<n ; i=i+1){cin>>a ;v.pb(a);}}
void PRINT(vll &v , ll a = 0){for(ll i=a ; i<v.size() ; i=i+1){/*v[i] = max((ll)0,v[i]);*/cout<<v[i]<<" " ;}cout<<"\n" ;}
double logy(ll n , ll b){if(b==0){return(-1);}if(n==1){return(0);}return((db)log10(n)/log10(b));}
long long power(long long k , long long n , long long m=mod){long long res = 1;while(n){if(n%2!=0){res = (res*k)%m ;}k = (k*k)%m ;n = n/2 ;}return(res) ;}
double power(double k , long long n ){double res = 1;while(n){if(n%2!=0){res = (res*k) ;}k = (k*k) ;n = n/2 ;}return(res) ;}
ll sign(ll i){if(i==0){return(0);}if(i>0){return(1);}return(-1);}
double distance(pll a , pll b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se-b.se))));}
double distance(pair<ll,pll> a , pair<ll,pll> b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se.fi-b.se.fi) + sqr(a.se.se - b.se.se))));}
//ll lis(vll v){ll d = sz(v);vll dis(d+1,inf);for(ll i = 0 ; i<d ; i++){*lowerB(all(dis),v[i]) = v[i];}for(ll i=0 ; i<d+1 ; i++){if(dis[i]==inf){return(i);}}return(1);}
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }//for strictly increasing use lower bound(in function lis) otherwhise use upper bound
#define lcm(a,b) ((a/gcd(a,b))*b)
const ll dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const ll dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
vpll dr;
ll n,m,k,h,a1,a2,t;
db prob;
string str;
bool ok = true;
vpll v;
void check(db q , ll b)
{
    ll c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    //temp is too high
    //p is for low
    //q is for high
    //a is for low
    //b is for high
    x = 0;
    for(i=n-1 ; i>=0 ; i--)
    {
        c = v[i].fi;
        d = v[i].se;
        db r = 0;
        if(c==t)
        {
            h-=d;
        }
        if(b-d)
        {

            r = (q-c*d)/(db)(b-d);
        }
        if(r>t)
        {
            b-=d;
            q-=c*d;
        }
        else
        {
            b-=d;
            q-=c*d;
            break;
        }
    }
    //c is temp and d is maximum value of water having temp c
    /*db lo = 0;
    db hi = d;
    z = 0;
    while(z<N)
    {
        z++;
        db mid = lo + (hi-lo)/2.0;
        db temp = 0;
        if(b+mid)
        {
            temp = (q+mid*c)/(db)(b+mid);
        }
        if(temp>=t)
        {
            hi = mid;
        }
        else
        {
            lo = mid;
        }
    }*/
    db val = 0;
    if(t-c)
    {
        val = (q-b*t)/(db)(t-c);
    }
    val+=b;
    showzero;
    val+=h;
    ww1(val);
}
int main()
{
    FastIO;
    PRECISION(15);
    ll a,b,c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    db p,q,r,w;
    char ch,chr ;
    string str1,str2,str3,str4;
    //ll a1=0,a2=0,b1=0,b2=0,c1=0 ;
    //cin>>str>>str1;
    //Listen to Zero(Imagine Dragons!!)
    //Listen to Burn(Ellie Goulding)
    //Stay Motivated!!
    //Never use i for two or more nested loops!!
    //Range Query + Constructive + DSU +  Graph Theory + Math + Number Theory + DP(DP + DP with Bitmasks + DP on Trees) + Bitmasks + Data Structures + Strings + Geometry
    //Binary and Ternary Search + Brute Force + Greedy + Implementation
    //In a comparator function comp(pll a , pll b) if comp returns true then a comes before b otherwise b comes berfore a
    //For Longest Common Palindromic Subsequence find the Longest Common subsequence between Original Array and Reverse of the original array
    //Fuck Excuses!!Focus on how to get better
    //First Think then code
    //memset(viv,false,sof(viv));
    //memset(dp,-1,sof(dp));
    //call(dr);
    //1920
    //ThinkThinkThinkThink NOW
    cin>>n>>t;
    v.resz(n);
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].se = a;
    }
    h = 0;
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].fi = a;
        if(a==t)
        {
            h+=v[i].se;
        }
    }
    sort(all(v));
    a = 0; //total volume of water with temp less than T
    p = 0; //total temp with water having temp less than T
    b = 0;//total volume of water with temp more than T
    q = 0;//total temp with water having temp more than T
    for(i=0 ; i<n ; i++)
    {
        if(v[i].fi>=t)
        {
            b+=v[i].se;
            q+=(v[i].se*v[i].fi);
        }
        else
        {
            a+=v[i].se;
            p+=(v[i].se*v[i].fi);
        }
    }
    if(v[n-1].fi<t || v[0].fi>t)
    {
        ww1(0);
        exit(0);
    }
    r = (p+q)/(db)(a+b);
    if(r<t)
    {
        t = -t;
        for(i=0 ; i<n; i++)
        {
            v[i].fi = -v[i].fi;
        }
        sort(all(v));
        p = -p;
        q = -q;

    }
    q+=p;
    b+=a;
    check(q,b);
}
//Always Check for Binary Search(Along with Lower/Upper Bound) , Ternary Search , Greedy then go for DP , DFS , DSU  + Bridge Tree + and other stuff(described above)
//DO IT UNTIL YOU RUN OUT OF IDEAS ~ YOU KNOW WHO
//See The Editorial AN ~ YOU KNOW WHO


/*In Case of TLE -> 1.Use Int instead of Long Long
                    2.Use FastIO
                    3.Use "\n" Instead of endl
                    4.Use Vector and Arrays instead of Sets,Maps(if possible)
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> //required
#include <ext/pb_ds/tree_policy.hpp> //required
#define pb push_back
#define pf push_front
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define distinct(x) sort(all(x)); x.resize(unique(all(x))-x.begin());
#define sz(x)  (long long)(x).size()
#define sqr(x) (x)*(x)
#define sof sizeof
#define resz resize
#define ins insert
#define lowerB lower_bound
#define upperB upper_bound
#define mkp make_pair
#define mkt make_tuple
#define act(a,v) (get<(long long)a>(v))
#define mod 1000000007
#define mod1 998244353
#define N 1000003  //N idhar hai
#define inf 1e18
#define minf -1e18
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) >= (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define FastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define PRECISION(n) std::cout.unsetf ( std::ios::floatfield );std::cout.precision((ll)n)
#define getsm(v) accumulate(all(v),(ll)0)
#define getmx(v) max_element(all(v))
#define getmn(v) min_element(all(v))
#define wr1(a) cout<<(a)<<endl
#define wr2(a,b) cout<<(a)<<" "<<(b)<<endl
#define wr3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<endl
#define ww1(a) cout<<(a)<<"\n"
#define ww2(a,b) cout<<(a)<<" "<<(b)<<"\n"
#define ww3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<"\n"
#define FileIO freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
#define call(dr) dr.pb(mkp(1,0));dr.pb(mkp(-1,0));dr.pb(mkp(0,1));dr.pb(mkp(0,-1))
#define fill(dp,a,b) for(int i=0;i<a;i++)for(int j=0;j<b;j++)dp[i][j]=-1;
#define PI M_PI
#define fi first
#define se second
#define here cout<<"RSSB"<<endl
#define showzero cout<<std::showpoint
#define bitcount( x ) __builtin_popcountll( x )
#define ls(i) (1ll<<(i))
#define rs(i) ((i)>>1)
#define br "\n"
//#define sp " "
using namespace __gnu_pbds; //required
using namespace  std ;
typedef double db;
typedef long long ll ;
typedef vector<int>vi ;
//typedef vector<l>vl ;
typedef vector<ll>vll ;
typedef vector<vector<ll> >vvl ;
typedef pair<int,int> pii ;
typedef pair<ll,ll> pll ;
typedef vector<pll>vpll;
typedef vector<string>vstr;
typedef vector<bool>vbool ;
template <typename T> using ordered_set =  tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void READ(vll &v, ll n){ll a ;for(ll i=0 ; i<n ; i=i+1){cin>>a ;v.pb(a);}}
void PRINT(vll &v , ll a = 0){for(ll i=a ; i<v.size() ; i=i+1){/*v[i] = max((ll)0,v[i]);*/cout<<v[i]<<" " ;}cout<<"\n" ;}
double logy(ll n , ll b){if(b==0){return(-1);}if(n==1){return(0);}return((db)log10(n)/log10(b));}
long long power(long long k , long long n , long long m=mod){long long res = 1;while(n){if(n%2!=0){res = (res*k)%m ;}k = (k*k)%m ;n = n/2 ;}return(res) ;}
double power(double k , long long n ){double res = 1;while(n){if(n%2!=0){res = (res*k) ;}k = (k*k) ;n = n/2 ;}return(res) ;}
ll sign(ll i){if(i==0){return(0);}if(i>0){return(1);}return(-1);}
double distance(pll a , pll b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se-b.se))));}
double distance(pair<ll,pll> a , pair<ll,pll> b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se.fi-b.se.fi) + sqr(a.se.se - b.se.se))));}
//ll lis(vll v){ll d = sz(v);vll dis(d+1,inf);for(ll i = 0 ; i<d ; i++){*lowerB(all(dis),v[i]) = v[i];}for(ll i=0 ; i<d+1 ; i++){if(dis[i]==inf){return(i);}}return(1);}
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }//for strictly increasing use lower bound(in function lis) otherwhise use upper bound
#define lcm(a,b) ((a/gcd(a,b))*b)
const ll dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const ll dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
vpll dr;
ll n,m,k,h,a1,a2,t;
db prob;
string str;
bool ok = true;
vpll v;
void check(db q , ll b)
{
    ll c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    //temp is too high
    //p is for low
    //q is for high
    //a is for low
    //b is for high
    for(i=n-1 ; i>=0 ; i--)
    {
        c = v[i].fi;
        d = v[i].se;
        db r = 0;
        if(b-d)
        {
            r = (q-c*d)/(db)(b-d);
        }
        if(r>t)
        {
            b-=d;
            q-=c*d;
        }
        else
        {
            b-=d;
            q-=c*d;
            break;
        }
    }
    //c is temp and d is maximum value of water having temp c
    /*db lo = 0;
    db hi = d;
    z = 0;
    while(z<N)
    {
        z++;
        db mid = lo + (hi-lo)/2.0;
        db temp = 0;
        if(b+mid)
        {
            temp = (q+mid*c)/(db)(b+mid);
        }
        if(temp>=t)
        {
            hi = mid;
        }
        else
        {
            lo = mid;
        }
    }*/
    db val = 0;
    if(t-c)
    {
        val = (q-b*t)/(db)(t-c);
    }
    val+=b;
    showzero;
    val = max(val,(db)h)
    ww1(val);
}
int main()
{
    FastIO;
    PRECISION(15);
    ll a,b,c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    db p,q,r,w;
    char ch,chr ;
    string str1,str2,str3,str4;
    //ll a1=0,a2=0,b1=0,b2=0,c1=0 ;
    //cin>>str>>str1;
    //Listen to Zero(Imagine Dragons!!)
    //Listen to Burn(Ellie Goulding)
    //Stay Motivated!!
    //Never use i for two or more nested loops!!
    //Range Query + Constructive + DSU +  Graph Theory + Math + Number Theory + DP(DP + DP with Bitmasks + DP on Trees) + Bitmasks + Data Structures + Strings + Geometry
    //Binary and Ternary Search + Brute Force + Greedy + Implementation
    //In a comparator function comp(pll a , pll b) if comp returns true then a comes before b otherwise b comes berfore a
    //For Longest Common Palindromic Subsequence find the Longest Common subsequence between Original Array and Reverse of the original array
    //Fuck Excuses!!Focus on how to get better
    //First Think then code
    //memset(viv,false,sof(viv));
    //memset(dp,-1,sof(dp));
    //call(dr);
    //1920
    //ThinkThinkThinkThink NOW
    cin>>n>>t;
    v.resz(n);
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].se = a;
    }
    h = 0;
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].fi = a;
        if(a==t)
        {
            h = max(h,v[i].fi);
        }
    }
    sort(all(v));
    a = 0; //total volume of water with temp less than T
    p = 0; //total temp with water having temp less than T
    b = 0;//total volume of water with temp more than T
    q = 0;//total temp with water having temp more than T
    for(i=0 ; i<n ; i++)
    {
        if(v[i].fi>=t)
        {
            b+=v[i].se;
            q+=(v[i].se*v[i].fi);
        }
        else
        {
            a+=v[i].se;
            p+=(v[i].se*v[i].fi);
        }
    }
    if(v[n-1].fi<t || v[0].fi>t)
    {
        ww1(0);
        exit(0);
    }
    r = (p+q)/(db)(a+b);
    if(r<t)
    {
        t = -t;
        for(i=0 ; i<n; i++)
        {
            v[i].fi = -v[i].fi;
        }
        sort(all(v));
        p = -p;
        q = -q;
    }
    q+=p;
    b+=a;
    check(q,b);
}
//Always Check for Binary Search(Along with Lower/Upper Bound) , Ternary Search , Greedy then go for DP , DFS , DSU  + Bridge Tree + and other stuff(described above)
//DO IT UNTIL YOU RUN OUT OF IDEAS ~ YOU KNOW WHO
//See The Editorial AN ~ YOU KNOW WHO


/*In Case of TLE -> 1.Use Int instead of Long Long
                    2.Use FastIO
                    3.Use "\n" Instead of endl
                    4.Use Vector and Arrays instead of Sets,Maps(if possible)
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> //required
#include <ext/pb_ds/tree_policy.hpp> //required
#define pb push_back
#define pf push_front
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define distinct(x) sort(all(x)); x.resize(unique(all(x))-x.begin());
#define sz(x)  (long long)(x).size()
#define sqr(x) (x)*(x)
#define sof sizeof
#define resz resize
#define ins insert
#define lowerB lower_bound
#define upperB upper_bound
#define mkp make_pair
#define mkt make_tuple
#define act(a,v) (get<(long long)a>(v))
#define mod 1000000007
#define mod1 998244353
#define N 10000003  //N idhar hai
#define inf 1e18
#define minf -1e18
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) >= (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define FastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define PRECISION(n) std::cout.unsetf ( std::ios::floatfield );std::cout.precision((ll)n)
#define getsm(v) accumulate(all(v),(ll)0)
#define getmx(v) max_element(all(v))
#define getmn(v) min_element(all(v))
#define wr1(a) cout<<(a)<<endl
#define wr2(a,b) cout<<(a)<<" "<<(b)<<endl
#define wr3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<endl
#define ww1(a) cout<<(a)<<"\n"
#define ww2(a,b) cout<<(a)<<" "<<(b)<<"\n"
#define ww3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<"\n"
#define FileIO freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
#define call(dr) dr.pb(mkp(1,0));dr.pb(mkp(-1,0));dr.pb(mkp(0,1));dr.pb(mkp(0,-1))
#define fill(dp,a,b) for(int i=0;i<a;i++)for(int j=0;j<b;j++)dp[i][j]=-1;
#define PI M_PI
#define fi first
#define se second
#define here cout<<"RSSB"<<endl
#define showzero cout<<std::showpoint
#define bitcount( x ) __builtin_popcountll( x )
#define ls(i) (1ll<<(i))
#define rs(i) ((i)>>1)
#define br "\n"
//#define sp " "
using namespace __gnu_pbds; //required
using namespace  std ;
typedef double db;
typedef long long ll ;
typedef vector<int>vi ;
//typedef vector<l>vl ;
typedef vector<ll>vll ;
typedef vector<vector<ll> >vvl ;
typedef pair<int,int> pii ;
typedef pair<ll,ll> pll ;
typedef vector<pll>vpll;
typedef vector<string>vstr;
typedef vector<bool>vbool ;
template <typename T> using ordered_set =  tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void READ(vll &v, ll n){ll a ;for(ll i=0 ; i<n ; i=i+1){cin>>a ;v.pb(a);}}
void PRINT(vll &v , ll a = 0){for(ll i=a ; i<v.size() ; i=i+1){/*v[i] = max((ll)0,v[i]);*/cout<<v[i]<<" " ;}cout<<"\n" ;}
double logy(ll n , ll b){if(b==0){return(-1);}if(n==1){return(0);}return((db)log10(n)/log10(b));}
long long power(long long k , long long n , long long m=mod){long long res = 1;while(n){if(n%2!=0){res = (res*k)%m ;}k = (k*k)%m ;n = n/2 ;}return(res) ;}
double power(double k , long long n ){double res = 1;while(n){if(n%2!=0){res = (res*k) ;}k = (k*k) ;n = n/2 ;}return(res) ;}
ll sign(ll i){if(i==0){return(0);}if(i>0){return(1);}return(-1);}
double distance(pll a , pll b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se-b.se))));}
double distance(pair<ll,pll> a , pair<ll,pll> b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se.fi-b.se.fi) + sqr(a.se.se - b.se.se))));}
//ll lis(vll v){ll d = sz(v);vll dis(d+1,inf);for(ll i = 0 ; i<d ; i++){*lowerB(all(dis),v[i]) = v[i];}for(ll i=0 ; i<d+1 ; i++){if(dis[i]==inf){return(i);}}return(1);}
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }//for strictly increasing use lower bound(in function lis) otherwhise use upper bound
#define lcm(a,b) ((a/gcd(a,b))*b)
const ll dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const ll dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
vpll dr;
ll n,m,k,h,a1,a2,t;
db prob;
string str;
bool ok = true;
vpll v;
void check(db p , db q , ll a , ll b)
{
    ll c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    //temp is too high
    //p is for low
    //q is for high
    //a is for low
    //b is for high
    for(i=n-1 ; i>=0 ; i--)
    {
        c = v[i].fi;
        d = v[i].se;
        db r = (p+q-c*d)/(db)(a+b-d);
        if(r>t)
        {
            b-=d;
            q-=c*d;
        }
        else
        {
            b-=d;
            q-=c*d;
            break;
        }
    }
    //c is temp and d is maximum value of water having temp c
    db lo = 0;
    db hi = d;
    z = 0;
    while(z<N)
    {
        z++;
        db mid = lo + (hi-lo)/2;
        db temp = (p+q+mid*c)/(db)(a+b+mid);
        if(temp>=t)
        {
            hi = mid;
        }
        else
        {
            lo = mid;
        }
    }
    showzero;
    ww1(a+b+hi);
}
int main()
{
    FastIO;
    PRECISION(15);
    ll a,b,c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    db p,q,r,w;
    char ch,chr ;
    string str1,str2,str3,str4;
    //ll a1=0,a2=0,b1=0,b2=0,c1=0 ;
    //cin>>str>>str1;
    //Listen to Zero(Imagine Dragons!!)
    //Listen to Burn(Ellie Goulding)
    //Stay Motivated!!
    //Never use i for two or more nested loops!!
    //Range Query + Constructive + DSU +  Graph Theory + Math + Number Theory + DP(DP + DP with Bitmasks + DP on Trees) + Bitmasks + Data Structures + Strings + Geometry
    //Binary and Ternary Search + Brute Force + Greedy + Implementation
    //In a comparator function comp(pll a , pll b) if comp returns true then a comes before b otherwise b comes berfore a
    //For Longest Common Palindromic Subsequence find the Longest Common subsequence between Original Array and Reverse of the original array
    //Fuck Excuses!!Focus on how to get better
    //First Think then code
    //memset(viv,false,sof(viv));
    //memset(dp,-1,sof(dp));
    //call(dr);
    //1920
    //ThinkThinkThinkThink NOW
    cin>>n>>t;
    v.resz(n);
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].se = a;
    }
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].fi = a;
    }
    sort(all(v));
    a = 0; //total volume of water with temp less than T
    p = 0; //total temp with water having temp less than T
    b = 0;//total volume of water with temp more than T
    q = 0;//total temp with water having temp more than T
    for(i=0 ; i<n ; i++)
    {
        if(v[i].fi>=t)
        {
            b+=v[i].se;
            q+=(v[i].se*v[i].fi);
        }
        else
        {
            a+=v[i].se;
            p+=(v[i].se*v[i].fi);
        }
    }
    if(v[n-1].fi<t)
    {
        ww1(-1);
        exit(0);
    }
    r = (p+q)/(db)(a+b);
    if(r<t)
    {
        sort(rall(v));
        swap(p,q);
        swap(a,b);
    }
    check(p,q,a,b);
}
//Always Check for Binary Search(Along with Lower/Upper Bound) , Ternary Search , Greedy then go for DP , DFS , DSU  + Bridge Tree + and other stuff(described above)
//DO IT UNTIL YOU RUN OUT OF IDEAS ~ YOU KNOW WHO
//See The Editorial AN ~ YOU KNOW WHO


/*In Case of TLE -> 1.Use Int instead of Long Long
                    2.Use FastIO
                    3.Use "\n" Instead of endl
                    4.Use Vector and Arrays instead of Sets,Maps(if possible)
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> //required
#include <ext/pb_ds/tree_policy.hpp> //required
#define pb push_back
#define pf push_front
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define distinct(x) sort(all(x)); x.resize(unique(all(x))-x.begin());
#define sz(x)  (long long)(x).size()
#define sqr(x) (x)*(x)
#define sof sizeof
#define resz resize
#define ins insert
#define lowerB lower_bound
#define upperB upper_bound
#define mkp make_pair
#define mkt make_tuple
#define act(a,v) (get<(long long)a>(v))
#define mod 1000000007
#define mod1 998244353
#define N 200003  //N idhar hai
#define inf 1e18
#define minf -1e18
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) >= (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define FastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define PRECISION(n) std::cout.unsetf ( std::ios::floatfield );std::cout.precision((ll)n)
#define getsm(v) accumulate(all(v),(ll)0)
#define getmx(v) max_element(all(v))
#define getmn(v) min_element(all(v))
#define wr1(a) cout<<(a)<<endl
#define wr2(a,b) cout<<(a)<<" "<<(b)<<endl
#define wr3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<endl
#define ww1(a) cout<<(a)<<"\n"
#define ww2(a,b) cout<<(a)<<" "<<(b)<<"\n"
#define ww3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<"\n"
#define FileIO freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
#define call(dr) dr.pb(mkp(1,0));dr.pb(mkp(-1,0));dr.pb(mkp(0,1));dr.pb(mkp(0,-1))
#define fill(dp,a,b) for(int i=0;i<a;i++)for(int j=0;j<b;j++)dp[i][j]=-1;
#define PI M_PI
#define fi first
#define se second
#define here cout<<"RSSB"<<endl
#define showzero cout<<std::showpoint
#define bitcount( x ) __builtin_popcountll( x )
#define ls(i) (1ll<<(i))
#define rs(i) ((i)>>1)
#define br "\n"
//#define sp " "
using namespace __gnu_pbds; //required
using namespace  std ;
typedef double db;
typedef long long ll ;
typedef vector<int>vi ;
//typedef vector<l>vl ;
typedef vector<ll>vll ;
typedef vector<vector<ll> >vvl ;
typedef pair<int,int> pii ;
typedef pair<ll,ll> pll ;
typedef vector<pll>vpll;
typedef vector<string>vstr;
typedef vector<bool>vbool ;
template <typename T> using ordered_set =  tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void READ(vll &v, ll n){ll a ;for(ll i=0 ; i<n ; i=i+1){cin>>a ;v.pb(a);}}
void PRINT(vll &v , ll a = 0){for(ll i=a ; i<v.size() ; i=i+1){/*v[i] = max((ll)0,v[i]);*/cout<<v[i]<<" " ;}cout<<"\n" ;}
double logy(ll n , ll b){if(b==0){return(-1);}if(n==1){return(0);}return((db)log10(n)/log10(b));}
long long power(long long k , long long n , long long m=mod){long long res = 1;while(n){if(n%2!=0){res = (res*k)%m ;}k = (k*k)%m ;n = n/2 ;}return(res) ;}
double power(double k , long long n ){double res = 1;while(n){if(n%2!=0){res = (res*k) ;}k = (k*k) ;n = n/2 ;}return(res) ;}
ll sign(ll i){if(i==0){return(0);}if(i>0){return(1);}return(-1);}
double distance(pll a , pll b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se-b.se))));}
double distance(pair<ll,pll> a , pair<ll,pll> b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se.fi-b.se.fi) + sqr(a.se.se - b.se.se))));}
//ll lis(vll v){ll d = sz(v);vll dis(d+1,inf);for(ll i = 0 ; i<d ; i++){*lowerB(all(dis),v[i]) = v[i];}for(ll i=0 ; i<d+1 ; i++){if(dis[i]==inf){return(i);}}return(1);}
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }//for strictly increasing use lower bound(in function lis) otherwhise use upper bound
#define lcm(a,b) ((a/gcd(a,b))*b)
const ll dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const ll dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
vpll dr;
ll n,m,k,h,a1,a2,t;
db prob;
string str;
bool ok = true;
vpll v;
void check(db p , db q , ll a , ll b)
{
    ll c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    //temp is too high
    //p is for low
    //q is for high
    //a is for low
    //b is for high
    for(i=n-1 ; i>=0 ; i--)
    {
        c = v[i].fi;
        d = v[i].se;
        db r = (p+q-c*d)/(db)(a+b-d);
        if(r>t)
        {
            b-=d;
            q-=c*d;
        }
        else
        {
            b-=d;
            q-=c*d;
            break;
        }
    }
    //c is temp and d is maximum value of water having temp c
    db lo = 0;
    db hi = d;
    while(hi-lo>1e-10)
    {
        db mid = lo + (hi-lo)/2;
        db temp = (p+q+mid*c)/(db)(a+b+mid);
        if(temp>=t)
        {
            hi = mid;
        }
        else
        {
            lo = mid;
        }
    }
    showzero;
    ww1(a+b+hi);
}
int main()
{
    FastIO;
    PRECISION(10);
    ll a,b,c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    db p,q,r,w;
    char ch,chr ;
    string str1,str2,str3,str4;
    //ll a1=0,a2=0,b1=0,b2=0,c1=0 ;
    //cin>>str>>str1;
    //Listen to Zero(Imagine Dragons!!)
    //Listen to Burn(Ellie Goulding)
    //Stay Motivated!!
    //Never use i for two or more nested loops!!
    //Range Query + Constructive + DSU +  Graph Theory + Math + Number Theory + DP(DP + DP with Bitmasks + DP on Trees) + Bitmasks + Data Structures + Strings + Geometry
    //Binary and Ternary Search + Brute Force + Greedy + Implementation
    //In a comparator function comp(pll a , pll b) if comp returns true then a comes before b otherwise b comes berfore a
    //For Longest Common Palindromic Subsequence find the Longest Common subsequence between Original Array and Reverse of the original array
    //Fuck Excuses!!Focus on how to get better
    //First Think then code
    //memset(viv,false,sof(viv));
    //memset(dp,-1,sof(dp));
    //call(dr);
    //1920
    //ThinkThinkThinkThink NOW
    cin>>n>>t;
    v.resz(n);
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].se = a;
    }
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].fi = a;
    }
    sort(all(v));
    a = 0; //total volume of water with temp less than T
    p = 0; //total temp with water having temp less than T
    b = 0;//total volume of water with temp more than T
    q = 0;//total temp with water having temp more than T
    for(i=0 ; i<n ; i++)
    {
        if(v[i].fi>=t)
        {
            b+=v[i].se;
            q+=(v[i].se*v[i].fi);
        }
        else
        {
            a+=v[i].se;
            p+=(v[i].se*v[i].fi);
        }
    }
    if(v[n-1].fi<t || v[0].fi>t)
    {
        ww1(-1);
        exit(0);
    }
    r = (p+q)/(db)(a+b);
    if(r<t)
    {
        t = -t;
        for(i=0 ; i<n ; i++)
        {
            v[i].fi = -v[i].fi;
        }
        sort(all(v));
        p = -p;
        q = -q;
        swap(p,q);
    }
    check(p,q,a,b);
}
//Always Check for Binary Search(Along with Lower/Upper Bound) , Ternary Search , Greedy then go for DP , DFS , DSU  + Bridge Tree + and other stuff(described above)
//DO IT UNTIL YOU RUN OUT OF IDEAS ~ YOU KNOW WHO
//See The Editorial AN ~ YOU KNOW WHO


/*In Case of TLE -> 1.Use Int instead of Long Long
                    2.Use FastIO
                    3.Use "\n" Instead of endl
                    4.Use Vector and Arrays instead of Sets,Maps(if possible)
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> //required
#include <ext/pb_ds/tree_policy.hpp> //required
#define pb push_back
#define pf push_front
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define distinct(x) sort(all(x)); x.resize(unique(all(x))-x.begin());
#define sz(x)  (long long)(x).size()
#define sqr(x) (x)*(x)
#define sof sizeof
#define resz resize
#define ins insert
#define lowerB lower_bound
#define upperB upper_bound
#define mkp make_pair
#define mkt make_tuple
#define act(a,v) (get<(long long)a>(v))
#define mod 1000000007
#define mod1 998244353
#define N 1000003  //N idhar hai
#define inf 1e18
#define minf -1e18
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) >= (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define FastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define PRECISION(n) std::cout.unsetf ( std::ios::floatfield );std::cout.precision((ll)n)
#define getsm(v) accumulate(all(v),(ll)0)
#define getmx(v) max_element(all(v))
#define getmn(v) min_element(all(v))
#define wr1(a) cout<<(a)<<endl
#define wr2(a,b) cout<<(a)<<" "<<(b)<<endl
#define wr3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<endl
#define ww1(a) cout<<(a)<<"\n"
#define ww2(a,b) cout<<(a)<<" "<<(b)<<"\n"
#define ww3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<"\n"
#define FileIO freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
#define call(dr) dr.pb(mkp(1,0));dr.pb(mkp(-1,0));dr.pb(mkp(0,1));dr.pb(mkp(0,-1))
#define fill(dp,a,b) for(int i=0;i<a;i++)for(int j=0;j<b;j++)dp[i][j]=-1;
#define PI M_PI
#define fi first
#define se second
#define here cout<<"RSSB"<<endl
#define showzero cout<<std::showpoint
#define bitcount( x ) __builtin_popcountll( x )
#define ls(i) (1ll<<(i))
#define rs(i) ((i)>>1)
#define br "\n"
//#define sp " "
using namespace __gnu_pbds; //required
using namespace  std ;
typedef double db;
typedef long long ll ;
typedef vector<int>vi ;
//typedef vector<l>vl ;
typedef vector<ll>vll ;
typedef vector<vector<ll> >vvl ;
typedef pair<int,int> pii ;
typedef pair<ll,ll> pll ;
typedef vector<pll>vpll;
typedef vector<string>vstr;
typedef vector<bool>vbool ;
template <typename T> using ordered_set =  tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void READ(vll &v, ll n){ll a ;for(ll i=0 ; i<n ; i=i+1){cin>>a ;v.pb(a);}}
void PRINT(vll &v , ll a = 0){for(ll i=a ; i<v.size() ; i=i+1){/*v[i] = max((ll)0,v[i]);*/cout<<v[i]<<" " ;}cout<<"\n" ;}
double logy(ll n , ll b){if(b==0){return(-1);}if(n==1){return(0);}return((db)log10(n)/log10(b));}
long long power(long long k , long long n , long long m=mod){long long res = 1;while(n){if(n%2!=0){res = (res*k)%m ;}k = (k*k)%m ;n = n/2 ;}return(res) ;}
double power(double k , long long n ){double res = 1;while(n){if(n%2!=0){res = (res*k) ;}k = (k*k) ;n = n/2 ;}return(res) ;}
ll sign(ll i){if(i==0){return(0);}if(i>0){return(1);}return(-1);}
double distance(pll a , pll b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se-b.se))));}
double distance(pair<ll,pll> a , pair<ll,pll> b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se.fi-b.se.fi) + sqr(a.se.se - b.se.se))));}
//ll lis(vll v){ll d = sz(v);vll dis(d+1,inf);for(ll i = 0 ; i<d ; i++){*lowerB(all(dis),v[i]) = v[i];}for(ll i=0 ; i<d+1 ; i++){if(dis[i]==inf){return(i);}}return(1);}
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }//for strictly increasing use lower bound(in function lis) otherwhise use upper bound
#define lcm(a,b) ((a/gcd(a,b))*b)
const ll dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const ll dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
vpll dr;
ll n,m,k,h,a1,a2,t;
db prob;
string str;
bool ok = true;
vpll v;
void check(db q , ll b)
{
    ll c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    //temp is too high
    //p is for low
    //q is for high
    //a is for low
    //b is for high
    for(i=n-1 ; i>=0 ; i--)
    {
        c = v[i].fi;
        d = v[i].se;
        if(c==t)
        {
            h = 0;
        }
        db r = 0;
        if(b-d)
        {
            r = (q-c*d)/(db)(b-d);
        }
        if(r>t)
        {
            b-=d;
            q-=c*d;
        }
        else
        {
            b-=d;
            q-=c*d;
            break;
        }
    }
    //c is temp and d is maximum value of water having temp c
    /*db lo = 0;
    db hi = d;
    z = 0;
    while(z<N)
    {
        z++;
        db mid = lo + (hi-lo)/2.0;
        db temp = 0;
        if(b+mid)
        {
            temp = (q+mid*c)/(db)(b+mid);
        }
        if(temp>=t)
        {
            hi = mid;
        }
        else
        {
            lo = mid;
        }
    }*/
    db val = 0;
    if(t-c)
    {
        val = (q-b*t)/(db)(t-c);
    }
    val+=b;
    showzero;
    val+=h;
    ww1(val);
}
int main()
{
    FastIO;
    PRECISION(15);
    ll a,b,c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    db p,q,r,w;
    char ch,chr ;
    string str1,str2,str3,str4;
    //ll a1=0,a2=0,b1=0,b2=0,c1=0 ;
    //cin>>str>>str1;
    //Listen to Zero(Imagine Dragons!!)
    //Listen to Burn(Ellie Goulding)
    //Stay Motivated!!
    //Never use i for two or more nested loops!!
    //Range Query + Constructive + DSU +  Graph Theory + Math + Number Theory + DP(DP + DP with Bitmasks + DP on Trees) + Bitmasks + Data Structures + Strings + Geometry
    //Binary and Ternary Search + Brute Force + Greedy + Implementation
    //In a comparator function comp(pll a , pll b) if comp returns true then a comes before b otherwise b comes berfore a
    //For Longest Common Palindromic Subsequence find the Longest Common subsequence between Original Array and Reverse of the original array
    //Fuck Excuses!!Focus on how to get better
    //First Think then code
    //memset(viv,false,sof(viv));
    //memset(dp,-1,sof(dp));
    //call(dr);
    //1920
    //ThinkThinkThinkThink NOW
    cin>>n>>t;
    v.resz(n);
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].se = a;
    }
    h = 0;
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].fi = a;
        if(a==t)
        {
            h = max(h,v[i].se);
        }
    }
    sort(all(v));
    a = 0; //total volume of water with temp less than T
    p = 0; //total temp with water having temp less than T
    b = 0;//total volume of water with temp more than T
    q = 0;//total temp with water having temp more than T
    for(i=0 ; i<n ; i++)
    {
        if(v[i].fi>=t)
        {
            b+=v[i].se;
            q+=(v[i].se*v[i].fi);
        }
        else
        {
            a+=v[i].se;
            p+=(v[i].se*v[i].fi);
        }
    }
    if(v[n-1].fi<t || v[0].fi>t)
    {
        ww1(0);
        exit(0);
    }
    r = (p+q)/(db)(a+b);
    if(r<t)
    {
        t = -t;
        for(i=0 ; i<n; i++)
        {
            v[i].fi = -v[i].fi;
        }
        sort(all(v));
        p = -p;
        q = -q;

    }
    q+=p;
    b+=a;
    check(q,b);
}
//Always Check for Binary Search(Along with Lower/Upper Bound) , Ternary Search , Greedy then go for DP , DFS , DSU  + Bridge Tree + and other stuff(described above)
//DO IT UNTIL YOU RUN OUT OF IDEAS ~ YOU KNOW WHO
//See The Editorial AN ~ YOU KNOW WHO


/*In Case of TLE -> 1.Use Int instead of Long Long
                    2.Use FastIO
                    3.Use "\n" Instead of endl
                    4.Use Vector and Arrays instead of Sets,Maps(if possible)
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> //required
#include <ext/pb_ds/tree_policy.hpp> //required
#define pb push_back
#define pf push_front
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define distinct(x) sort(all(x)); x.resize(unique(all(x))-x.begin());
#define sz(x)  (long long)(x).size()
#define sqr(x) (x)*(x)
#define sof sizeof
#define resz resize
#define ins insert
#define lowerB lower_bound
#define upperB upper_bound
#define mkp make_pair
#define mkt make_tuple
#define act(a,v) (get<(long long)a>(v))
#define mod 1000000007
#define mod1 998244353
#define N 10000003  //N idhar hai
#define inf 1e18
#define minf -1e18
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) >= (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define FastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define PRECISION(n) std::cout.unsetf ( std::ios::floatfield );std::cout.precision((ll)n)
#define getsm(v) accumulate(all(v),(ll)0)
#define getmx(v) max_element(all(v))
#define getmn(v) min_element(all(v))
#define wr1(a) cout<<(a)<<endl
#define wr2(a,b) cout<<(a)<<" "<<(b)<<endl
#define wr3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<endl
#define ww1(a) cout<<(a)<<"\n"
#define ww2(a,b) cout<<(a)<<" "<<(b)<<"\n"
#define ww3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<"\n"
#define FileIO freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
#define call(dr) dr.pb(mkp(1,0));dr.pb(mkp(-1,0));dr.pb(mkp(0,1));dr.pb(mkp(0,-1))
#define fill(dp,a,b) for(int i=0;i<a;i++)for(int j=0;j<b;j++)dp[i][j]=-1;
#define PI M_PI
#define fi first
#define se second
#define here cout<<"RSSB"<<endl
#define showzero cout<<std::showpoint
#define bitcount( x ) __builtin_popcountll( x )
#define ls(i) (1ll<<(i))
#define rs(i) ((i)>>1)
#define br "\n"
//#define sp " "
using namespace __gnu_pbds; //required
using namespace  std ;
typedef double db;
typedef long long ll ;
typedef vector<int>vi ;
//typedef vector<l>vl ;
typedef vector<ll>vll ;
typedef vector<vector<ll> >vvl ;
typedef pair<int,int> pii ;
typedef pair<ll,ll> pll ;
typedef vector<pll>vpll;
typedef vector<string>vstr;
typedef vector<bool>vbool ;
template <typename T> using ordered_set =  tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void READ(vll &v, ll n){ll a ;for(ll i=0 ; i<n ; i=i+1){cin>>a ;v.pb(a);}}
void PRINT(vll &v , ll a = 0){for(ll i=a ; i<v.size() ; i=i+1){/*v[i] = max((ll)0,v[i]);*/cout<<v[i]<<" " ;}cout<<"\n" ;}
double logy(ll n , ll b){if(b==0){return(-1);}if(n==1){return(0);}return((db)log10(n)/log10(b));}
long long power(long long k , long long n , long long m=mod){long long res = 1;while(n){if(n%2!=0){res = (res*k)%m ;}k = (k*k)%m ;n = n/2 ;}return(res) ;}
double power(double k , long long n ){double res = 1;while(n){if(n%2!=0){res = (res*k) ;}k = (k*k) ;n = n/2 ;}return(res) ;}
ll sign(ll i){if(i==0){return(0);}if(i>0){return(1);}return(-1);}
double distance(pll a , pll b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se-b.se))));}
double distance(pair<ll,pll> a , pair<ll,pll> b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se.fi-b.se.fi) + sqr(a.se.se - b.se.se))));}
//ll lis(vll v){ll d = sz(v);vll dis(d+1,inf);for(ll i = 0 ; i<d ; i++){*lowerB(all(dis),v[i]) = v[i];}for(ll i=0 ; i<d+1 ; i++){if(dis[i]==inf){return(i);}}return(1);}
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }//for strictly increasing use lower bound(in function lis) otherwhise use upper bound
#define lcm(a,b) ((a/gcd(a,b))*b)
const ll dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const ll dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
vpll dr;
ll n,m,k,h,a1,a2,t;
db prob;
string str;
bool ok = true;
vpll v;
void check(db q , ll b)
{
    ll c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    //temp is too high
    //p is for low
    //q is for high
    //a is for low
    //b is for high
    for(i=n-1 ; i>=0 ; i--)
    {
        c = v[i].fi;
        d = v[i].se;
        db r = (q-c*d)/(db)(b-d);
        if(r>t)
        {
            b-=d;
            q-=c*d;
        }
        else
        {
            b-=d;
            q-=c*d;
            break;
        }
    }
    //c is temp and d is maximum value of water having temp c
    db lo = 0;
    db hi = d;
    z = 0;
    while(z<N)
    {
        z++;
        db mid = lo + (hi-lo)/2;
        db temp = (q+mid*c)/(db)(b+mid);
        if(temp>=t)
        {
            hi = mid;
        }
        else
        {
            lo = mid;
        }
    }
    showzero;
    ww1(b+hi);
}
int main()
{
    FastIO;
    PRECISION(15);
    ll a,b,c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    db p,q,r,w;
    char ch,chr ;
    string str1,str2,str3,str4;
    //ll a1=0,a2=0,b1=0,b2=0,c1=0 ;
    //cin>>str>>str1;
    //Listen to Zero(Imagine Dragons!!)
    //Listen to Burn(Ellie Goulding)
    //Stay Motivated!!
    //Never use i for two or more nested loops!!
    //Range Query + Constructive + DSU +  Graph Theory + Math + Number Theory + DP(DP + DP with Bitmasks + DP on Trees) + Bitmasks + Data Structures + Strings + Geometry
    //Binary and Ternary Search + Brute Force + Greedy + Implementation
    //In a comparator function comp(pll a , pll b) if comp returns true then a comes before b otherwise b comes berfore a
    //For Longest Common Palindromic Subsequence find the Longest Common subsequence between Original Array and Reverse of the original array
    //Fuck Excuses!!Focus on how to get better
    //First Think then code
    //memset(viv,false,sof(viv));
    //memset(dp,-1,sof(dp));
    //call(dr);
    //1920
    //ThinkThinkThinkThink NOW
    cin>>n>>t;
    v.resz(n);
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].se = a;
    }
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].fi = a;
    }
    sort(all(v));
    a = 0; //total volume of water with temp less than T
    p = 0; //total temp with water having temp less than T
    b = 0;//total volume of water with temp more than T
    q = 0;//total temp with water having temp more than T
    for(i=0 ; i<n ; i++)
    {
        if(v[i].fi>=t)
        {
            b+=v[i].se;
            q+=(v[i].se*v[i].fi);
        }
        else
        {
            a+=v[i].se;
            p+=(v[i].se*v[i].fi);
        }
    }
    if(v[n-1].fi<t)
    {
        ww1(-1);
        exit(0);
    }
    r = (p+q)/(db)(a+b);
    if(r<t)
    {
        sort(rall(v));
    }
    q+=p;
    b+=a;
    check(q,b);
}
//Always Check for Binary Search(Along with Lower/Upper Bound) , Ternary Search , Greedy then go for DP , DFS , DSU  + Bridge Tree + and other stuff(described above)
//DO IT UNTIL YOU RUN OUT OF IDEAS ~ YOU KNOW WHO
//See The Editorial AN ~ YOU KNOW WHO


/*In Case of TLE -> 1.Use Int instead of Long Long
                    2.Use FastIO
                    3.Use "\n" Instead of endl
                    4.Use Vector and Arrays instead of Sets,Maps(if possible)
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> //required
#include <ext/pb_ds/tree_policy.hpp> //required
#define pb push_back
#define pf push_front
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define distinct(x) sort(all(x)); x.resize(unique(all(x))-x.begin());
#define sz(x)  (long long)(x).size()
#define sqr(x) (x)*(x)
#define sof sizeof
#define resz resize
#define ins insert
#define lowerB lower_bound
#define upperB upper_bound
#define mkp make_pair
#define mkt make_tuple
#define act(a,v) (get<(long long)a>(v))
#define mod 1000000007
#define mod1 998244353
#define N 10000003  //N idhar hai
#define inf 1e18
#define minf -1e18
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) >= (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define FastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define PRECISION(n) std::cout.unsetf ( std::ios::floatfield );std::cout.precision((ll)n)
#define getsm(v) accumulate(all(v),(ll)0)
#define getmx(v) max_element(all(v))
#define getmn(v) min_element(all(v))
#define wr1(a) cout<<(a)<<endl
#define wr2(a,b) cout<<(a)<<" "<<(b)<<endl
#define wr3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<endl
#define ww1(a) cout<<(a)<<"\n"
#define ww2(a,b) cout<<(a)<<" "<<(b)<<"\n"
#define ww3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<"\n"
#define FileIO freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
#define call(dr) dr.pb(mkp(1,0));dr.pb(mkp(-1,0));dr.pb(mkp(0,1));dr.pb(mkp(0,-1))
#define fill(dp,a,b) for(int i=0;i<a;i++)for(int j=0;j<b;j++)dp[i][j]=-1;
#define PI M_PI
#define fi first
#define se second
#define here cout<<"RSSB"<<endl
#define showzero cout<<std::showpoint
#define bitcount( x ) __builtin_popcountll( x )
#define ls(i) (1ll<<(i))
#define rs(i) ((i)>>1)
#define br "\n"
//#define sp " "
using namespace __gnu_pbds; //required
using namespace  std ;
typedef double db;
typedef long long ll ;
typedef vector<int>vi ;
//typedef vector<l>vl ;
typedef vector<ll>vll ;
typedef vector<vector<ll> >vvl ;
typedef pair<int,int> pii ;
typedef pair<ll,ll> pll ;
typedef vector<pll>vpll;
typedef vector<string>vstr;
typedef vector<bool>vbool ;
template <typename T> using ordered_set =  tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void READ(vll &v, ll n){ll a ;for(ll i=0 ; i<n ; i=i+1){cin>>a ;v.pb(a);}}
void PRINT(vll &v , ll a = 0){for(ll i=a ; i<v.size() ; i=i+1){/*v[i] = max((ll)0,v[i]);*/cout<<v[i]<<" " ;}cout<<"\n" ;}
double logy(ll n , ll b){if(b==0){return(-1);}if(n==1){return(0);}return((db)log10(n)/log10(b));}
long long power(long long k , long long n , long long m=mod){long long res = 1;while(n){if(n%2!=0){res = (res*k)%m ;}k = (k*k)%m ;n = n/2 ;}return(res) ;}
double power(double k , long long n ){double res = 1;while(n){if(n%2!=0){res = (res*k) ;}k = (k*k) ;n = n/2 ;}return(res) ;}
ll sign(ll i){if(i==0){return(0);}if(i>0){return(1);}return(-1);}
double distance(pll a , pll b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se-b.se))));}
double distance(pair<ll,pll> a , pair<ll,pll> b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se.fi-b.se.fi) + sqr(a.se.se - b.se.se))));}
//ll lis(vll v){ll d = sz(v);vll dis(d+1,inf);for(ll i = 0 ; i<d ; i++){*lowerB(all(dis),v[i]) = v[i];}for(ll i=0 ; i<d+1 ; i++){if(dis[i]==inf){return(i);}}return(1);}
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }//for strictly increasing use lower bound(in function lis) otherwhise use upper bound
#define lcm(a,b) ((a/gcd(a,b))*b)
const ll dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const ll dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
vpll dr;
ll n,m,k,h,a1,a2,t;
db prob;
string str;
bool ok = true;
vpll v;
void check(db q , ll b)
{
    ll c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    //temp is too high
    //p is for low
    //q is for high
    //a is for low
    //b is for high
    for(i=n-1 ; i>=0 ; i--)
    {
        c = v[i].fi;
        d = v[i].se;
        db r = (q-c*d)/(db)(b-d);
        if(r>t)
        {
            b-=d;
            q-=c*d;
        }
        else
        {
            b-=d;
            q-=c*d;
            break;
        }
    }
    //c is temp and d is maximum value of water having temp c
    db lo = 0;
    db hi = d;
    z = 0;
    while(z<N)
    {
        z++;
        db mid = lo + (hi-lo)/2.0;
        db temp = 0;
        if(b+mid)
        {
            temp = (q+mid*c)/(db)(b+mid);
        }
        if(temp>=t)
        {
            hi = mid;
        }
        else
        {
            lo = mid;
        }
    }
    showzero;
    ww1(b+hi);
}
int main()
{
    FastIO;
    PRECISION(15);
    ll a,b,c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    db p,q,r,w;
    char ch,chr ;
    string str1,str2,str3,str4;
    //ll a1=0,a2=0,b1=0,b2=0,c1=0 ;
    //cin>>str>>str1;
    //Listen to Zero(Imagine Dragons!!)
    //Listen to Burn(Ellie Goulding)
    //Stay Motivated!!
    //Never use i for two or more nested loops!!
    //Range Query + Constructive + DSU +  Graph Theory + Math + Number Theory + DP(DP + DP with Bitmasks + DP on Trees) + Bitmasks + Data Structures + Strings + Geometry
    //Binary and Ternary Search + Brute Force + Greedy + Implementation
    //In a comparator function comp(pll a , pll b) if comp returns true then a comes before b otherwise b comes berfore a
    //For Longest Common Palindromic Subsequence find the Longest Common subsequence between Original Array and Reverse of the original array
    //Fuck Excuses!!Focus on how to get better
    //First Think then code
    //memset(viv,false,sof(viv));
    //memset(dp,-1,sof(dp));
    //call(dr);
    //1920
    //ThinkThinkThinkThink NOW
    cin>>n>>t;
    v.resz(n);
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].se = a;
    }
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].fi = a;
    }
    sort(all(v));
    a = 0; //total volume of water with temp less than T
    p = 0; //total temp with water having temp less than T
    b = 0;//total volume of water with temp more than T
    q = 0;//total temp with water having temp more than T
    for(i=0 ; i<n ; i++)
    {
        if(v[i].fi>=t)
        {
            b+=v[i].se;
            q+=(v[i].se*v[i].fi);
        }
        else
        {
            a+=v[i].se;
            p+=(v[i].se*v[i].fi);
        }
    }
    if(v[n-1].fi<t || v[0].fi>t)
    {
        ww1(0);
        exit(0);
    }
    r = (p+q)/(db)(a+b);
    if(r<t)
    {
        t = -t;
        for(i=0 ; i<n; i++)
        {
            v[i].fi = -v[i].fi;
        }
        sort(all(v));
        p = -p;
        q = -q;
    }
    q+=p;
    b+=a;
    check(q,b);
}
//Always Check for Binary Search(Along with Lower/Upper Bound) , Ternary Search , Greedy then go for DP , DFS , DSU  + Bridge Tree + and other stuff(described above)
//DO IT UNTIL YOU RUN OUT OF IDEAS ~ YOU KNOW WHO
//See The Editorial AN ~ YOU KNOW WHO


/*In Case of TLE -> 1.Use Int instead of Long Long
                    2.Use FastIO
                    3.Use "\n" Instead of endl
                    4.Use Vector and Arrays instead of Sets,Maps(if possible)
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> //required
#include <ext/pb_ds/tree_policy.hpp> //required
#define pb push_back
#define pf push_front
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define distinct(x) sort(all(x)); x.resize(unique(all(x))-x.begin());
#define sz(x)  (long long)(x).size()
#define sqr(x) (x)*(x)
#define sof sizeof
#define resz resize
#define ins insert
#define lowerB lower_bound
#define upperB upper_bound
#define mkp make_pair
#define mkt make_tuple
#define act(a,v) (get<(long long)a>(v))
#define mod 1000000007
#define mod1 998244353
#define N 1000003  //N idhar hai
#define inf 1e18
#define minf -1e18
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) >= (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define FastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define PRECISION(n) std::cout.unsetf ( std::ios::floatfield );std::cout.precision((ll)n)
#define getsm(v) accumulate(all(v),(ll)0)
#define getmx(v) max_element(all(v))
#define getmn(v) min_element(all(v))
#define wr1(a) cout<<(a)<<endl
#define wr2(a,b) cout<<(a)<<" "<<(b)<<endl
#define wr3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<endl
#define ww1(a) cout<<(a)<<"\n"
#define ww2(a,b) cout<<(a)<<" "<<(b)<<"\n"
#define ww3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<"\n"
#define FileIO freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
#define call(dr) dr.pb(mkp(1,0));dr.pb(mkp(-1,0));dr.pb(mkp(0,1));dr.pb(mkp(0,-1))
#define fill(dp,a,b) for(int i=0;i<a;i++)for(int j=0;j<b;j++)dp[i][j]=-1;
#define PI M_PI
#define fi first
#define se second
#define here cout<<"RSSB"<<endl
#define showzero cout<<std::showpoint
#define bitcount( x ) __builtin_popcountll( x )
#define ls(i) (1ll<<(i))
#define rs(i) ((i)>>1)
#define br "\n"
//#define sp " "
using namespace __gnu_pbds; //required
using namespace  std ;
typedef double db;
typedef long long ll ;
typedef vector<int>vi ;
//typedef vector<l>vl ;
typedef vector<ll>vll ;
typedef vector<vector<ll> >vvl ;
typedef pair<int,int> pii ;
typedef pair<ll,ll> pll ;
typedef vector<pll>vpll;
typedef vector<string>vstr;
typedef vector<bool>vbool ;
template <typename T> using ordered_set =  tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void READ(vll &v, ll n){ll a ;for(ll i=0 ; i<n ; i=i+1){cin>>a ;v.pb(a);}}
void PRINT(vll &v , ll a = 0){for(ll i=a ; i<v.size() ; i=i+1){/*v[i] = max((ll)0,v[i]);*/cout<<v[i]<<" " ;}cout<<"\n" ;}
double logy(ll n , ll b){if(b==0){return(-1);}if(n==1){return(0);}return((db)log10(n)/log10(b));}
long long power(long long k , long long n , long long m=mod){long long res = 1;while(n){if(n%2!=0){res = (res*k)%m ;}k = (k*k)%m ;n = n/2 ;}return(res) ;}
double power(double k , long long n ){double res = 1;while(n){if(n%2!=0){res = (res*k) ;}k = (k*k) ;n = n/2 ;}return(res) ;}
ll sign(ll i){if(i==0){return(0);}if(i>0){return(1);}return(-1);}
double distance(pll a , pll b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se-b.se))));}
double distance(pair<ll,pll> a , pair<ll,pll> b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se.fi-b.se.fi) + sqr(a.se.se - b.se.se))));}
//ll lis(vll v){ll d = sz(v);vll dis(d+1,inf);for(ll i = 0 ; i<d ; i++){*lowerB(all(dis),v[i]) = v[i];}for(ll i=0 ; i<d+1 ; i++){if(dis[i]==inf){return(i);}}return(1);}
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }//for strictly increasing use lower bound(in function lis) otherwhise use upper bound
#define lcm(a,b) ((a/gcd(a,b))*b)
const ll dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const ll dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
vpll dr;
ll n,m,k,h,a1,a2,t;
db prob;
string str;
bool ok = true;
vpll v;
void check(db q , ll b)
{
    ll c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    //temp is too high
    //p is for low
    //q is for high
    //a is for low
    //b is for high
    x = 0;
    h = 0;
    for(i=n-1 ; i>=0 ; i--)
    {
        c = v[i].fi;
        d = v[i].se;
        db r = 0;
        if(c==t)
        {
            h+=d;
        }
        if(b-d)
        {

            r = (q-c*d)/(db)(b-d);
        }
        if(r>t)
        {
            b-=d;
            q-=c*d;
        }
        else
        {
            b-=d;
            q-=c*d;
            break;
        }
    }
    //c is temp and d is maximum value of water having temp c
    /*db lo = 0;
    db hi = d;
    z = 0;
    while(z<N)
    {
        z++;
        db mid = lo + (hi-lo)/2.0;
        db temp = 0;
        if(b+mid)
        {
            temp = (q+mid*c)/(db)(b+mid);
        }
        if(temp>=t)
        {
            hi = mid;
        }
        else
        {
            lo = mid;
        }
    }*/
    db val = 0;
    if(t-c)
    {
        val = (q-b*t)/(db)(t-c);
    }
    val+=b;
    showzero;
    val+=h;
    ww1(val);
}
int main()
{
    FastIO;
    PRECISION(15);
    ll a,b,c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    db p,q,r,w;
    char ch,chr ;
    string str1,str2,str3,str4;
    //ll a1=0,a2=0,b1=0,b2=0,c1=0 ;
    //cin>>str>>str1;
    //Listen to Zero(Imagine Dragons!!)
    //Listen to Burn(Ellie Goulding)
    //Stay Motivated!!
    //Never use i for two or more nested loops!!
    //Range Query + Constructive + DSU +  Graph Theory + Math + Number Theory + DP(DP + DP with Bitmasks + DP on Trees) + Bitmasks + Data Structures + Strings + Geometry
    //Binary and Ternary Search + Brute Force + Greedy + Implementation
    //In a comparator function comp(pll a , pll b) if comp returns true then a comes before b otherwise b comes berfore a
    //For Longest Common Palindromic Subsequence find the Longest Common subsequence between Original Array and Reverse of the original array
    //Fuck Excuses!!Focus on how to get better
    //First Think then code
    //memset(viv,false,sof(viv));
    //memset(dp,-1,sof(dp));
    //call(dr);
    //1920
    //ThinkThinkThinkThink NOW
    cin>>n>>t;
    v.resz(n);
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].se = a;
    }
    h = 0;
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].fi = a;
        if(a==t)
        {
            h+=v[i].se;
        }
    }
    sort(all(v));
    a = 0; //total volume of water with temp less than T
    p = 0; //total temp with water having temp less than T
    b = 0;//total volume of water with temp more than T
    q = 0;//total temp with water having temp more than T
    for(i=0 ; i<n ; i++)
    {
        if(v[i].fi>=t)
        {
            b+=v[i].se;
            q+=(v[i].se*v[i].fi);
        }
        else
        {
            a+=v[i].se;
            p+=(v[i].se*v[i].fi);
        }
    }
    if(v[n-1].fi<t || v[0].fi>t)
    {
        ww1(0);
        exit(0);
    }
    r = (p+q)/(db)(a+b);
    if(r<t)
    {
        t = -t;
        for(i=0 ; i<n; i++)
        {
            v[i].fi = -v[i].fi;
        }
        sort(all(v));
        p = -p;
        q = -q;

    }
    q+=p;
    b+=a;
    check(q,b);
}
//Always Check for Binary Search(Along with Lower/Upper Bound) , Ternary Search , Greedy then go for DP , DFS , DSU  + Bridge Tree + and other stuff(described above)
//DO IT UNTIL YOU RUN OUT OF IDEAS ~ YOU KNOW WHO
//See The Editorial AN ~ YOU KNOW WHO


/*In Case of TLE -> 1.Use Int instead of Long Long
                    2.Use FastIO
                    3.Use "\n" Instead of endl
                    4.Use Vector and Arrays instead of Sets,Maps(if possible)
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> //required
#include <ext/pb_ds/tree_policy.hpp> //required
#define pb push_back
#define pf push_front
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define distinct(x) sort(all(x)); x.resize(unique(all(x))-x.begin());
#define sz(x)  (long long)(x).size()
#define sqr(x) (x)*(x)
#define sof sizeof
#define resz resize
#define ins insert
#define lowerB lower_bound
#define upperB upper_bound
#define mkp make_pair
#define mkt make_tuple
#define act(a,v) (get<(long long)a>(v))
#define mod 1000000007
#define mod1 998244353
#define N 1000003  //N idhar hai
#define inf 1e18
#define minf -1e18
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) >= (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define FastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define PRECISION(n) std::cout.unsetf ( std::ios::floatfield );std::cout.precision((ll)n)
#define getsm(v) accumulate(all(v),(ll)0)
#define getmx(v) max_element(all(v))
#define getmn(v) min_element(all(v))
#define wr1(a) cout<<(a)<<endl
#define wr2(a,b) cout<<(a)<<" "<<(b)<<endl
#define wr3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<endl
#define ww1(a) cout<<(a)<<"\n"
#define ww2(a,b) cout<<(a)<<" "<<(b)<<"\n"
#define ww3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<"\n"
#define FileIO freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
#define call(dr) dr.pb(mkp(1,0));dr.pb(mkp(-1,0));dr.pb(mkp(0,1));dr.pb(mkp(0,-1))
#define fill(dp,a,b) for(int i=0;i<a;i++)for(int j=0;j<b;j++)dp[i][j]=-1;
#define PI M_PI
#define fi first
#define se second
#define here cout<<"RSSB"<<endl
#define showzero cout<<std::showpoint
#define bitcount( x ) __builtin_popcountll( x )
#define ls(i) (1ll<<(i))
#define rs(i) ((i)>>1)
#define br "\n"
//#define sp " "
using namespace __gnu_pbds; //required
using namespace  std ;
typedef double db;
typedef long long ll ;
typedef vector<int>vi ;
//typedef vector<l>vl ;
typedef vector<ll>vll ;
typedef vector<vector<ll> >vvl ;
typedef pair<int,int> pii ;
typedef pair<ll,ll> pll ;
typedef vector<pll>vpll;
typedef vector<string>vstr;
typedef vector<bool>vbool ;
template <typename T> using ordered_set =  tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void READ(vll &v, ll n){ll a ;for(ll i=0 ; i<n ; i=i+1){cin>>a ;v.pb(a);}}
void PRINT(vll &v , ll a = 0){for(ll i=a ; i<v.size() ; i=i+1){/*v[i] = max((ll)0,v[i]);*/cout<<v[i]<<" " ;}cout<<"\n" ;}
double logy(ll n , ll b){if(b==0){return(-1);}if(n==1){return(0);}return((db)log10(n)/log10(b));}
long long power(long long k , long long n , long long m=mod){long long res = 1;while(n){if(n%2!=0){res = (res*k)%m ;}k = (k*k)%m ;n = n/2 ;}return(res) ;}
double power(double k , long long n ){double res = 1;while(n){if(n%2!=0){res = (res*k) ;}k = (k*k) ;n = n/2 ;}return(res) ;}
ll sign(ll i){if(i==0){return(0);}if(i>0){return(1);}return(-1);}
double distance(pll a , pll b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se-b.se))));}
double distance(pair<ll,pll> a , pair<ll,pll> b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se.fi-b.se.fi) + sqr(a.se.se - b.se.se))));}
//ll lis(vll v){ll d = sz(v);vll dis(d+1,inf);for(ll i = 0 ; i<d ; i++){*lowerB(all(dis),v[i]) = v[i];}for(ll i=0 ; i<d+1 ; i++){if(dis[i]==inf){return(i);}}return(1);}
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }//for strictly increasing use lower bound(in function lis) otherwhise use upper bound
#define lcm(a,b) ((a/gcd(a,b))*b)
const ll dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const ll dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
vpll dr;
ll n,m,k,h,a1,a2,t;
db prob;
string str;
bool ok = true;
vpll v;
void check(db q , ll b)
{
    ll c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    //temp is too high
    //p is for low
    //q is for high
    //a is for low
    //b is for high
    for(i=n-1 ; i>=0 ; i--)
    {
        c = v[i].fi;
        d = v[i].se;
        db r = 0;
        if(b-d)
        {
            r = (q-c*d)/(db)(b-d);
        }
        if(r>t)
        {
            b-=d;
            q-=c*d;
        }
        else
        {
            b-=d;
            q-=c*d;
            break;
        }
    }
    //c is temp and d is maximum value of water having temp c
    /*db lo = 0;
    db hi = d;
    z = 0;
    while(z<N)
    {
        z++;
        db mid = lo + (hi-lo)/2.0;
        db temp = 0;
        if(b+mid)
        {
            temp = (q+mid*c)/(db)(b+mid);
        }
        if(temp>=t)
        {
            hi = mid;
        }
        else
        {
            lo = mid;
        }
    }*/
    db val = (q-b*t)/(db)(t-c);
    val+=b;
    showzero;
    ww1(val);
}
int main()
{
    FastIO;
    PRECISION(15);
    ll a,b,c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    db p,q,r,w;
    char ch,chr ;
    string str1,str2,str3,str4;
    //ll a1=0,a2=0,b1=0,b2=0,c1=0 ;
    //cin>>str>>str1;
    //Listen to Zero(Imagine Dragons!!)
    //Listen to Burn(Ellie Goulding)
    //Stay Motivated!!
    //Never use i for two or more nested loops!!
    //Range Query + Constructive + DSU +  Graph Theory + Math + Number Theory + DP(DP + DP with Bitmasks + DP on Trees) + Bitmasks + Data Structures + Strings + Geometry
    //Binary and Ternary Search + Brute Force + Greedy + Implementation
    //In a comparator function comp(pll a , pll b) if comp returns true then a comes before b otherwise b comes berfore a
    //For Longest Common Palindromic Subsequence find the Longest Common subsequence between Original Array and Reverse of the original array
    //Fuck Excuses!!Focus on how to get better
    //First Think then code
    //memset(viv,false,sof(viv));
    //memset(dp,-1,sof(dp));
    //call(dr);
    //1920
    //ThinkThinkThinkThink NOW
    cin>>n>>t;
    v.resz(n);
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].se = a;
    }
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].fi = a;
    }
    sort(all(v));
    a = 0; //total volume of water with temp less than T
    p = 0; //total temp with water having temp less than T
    b = 0;//total volume of water with temp more than T
    q = 0;//total temp with water having temp more than T
    for(i=0 ; i<n ; i++)
    {
        if(v[i].fi>=t)
        {
            b+=v[i].se;
            q+=(v[i].se*v[i].fi);
        }
        else
        {
            a+=v[i].se;
            p+=(v[i].se*v[i].fi);
        }
    }
    if(v[n-1].fi<t || v[0].fi>t)
    {
        ww1(0);
        exit(0);
    }
    r = (p+q)/(db)(a+b);
    if(r<t)
    {
        t = -t;
        for(i=0 ; i<n; i++)
        {
            v[i].fi = -v[i].fi;
        }
        sort(all(v));
        p = -p;
        q = -q;
    }
    q+=p;
    b+=a;
    check(q,b);
}
//Always Check for Binary Search(Along with Lower/Upper Bound) , Ternary Search , Greedy then go for DP , DFS , DSU  + Bridge Tree + and other stuff(described above)
//DO IT UNTIL YOU RUN OUT OF IDEAS ~ YOU KNOW WHO
//See The Editorial AN ~ YOU KNOW WHO


/*In Case of TLE -> 1.Use Int instead of Long Long
                    2.Use FastIO
                    3.Use "\n" Instead of endl
                    4.Use Vector and Arrays instead of Sets,Maps(if possible)
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> //required
#include <ext/pb_ds/tree_policy.hpp> //required
#define pb push_back
#define pf push_front
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define distinct(x) sort(all(x)); x.resize(unique(all(x))-x.begin());
#define sz(x)  (long long)(x).size()
#define sqr(x) (x)*(x)
#define sof sizeof
#define resz resize
#define ins insert
#define lowerB lower_bound
#define upperB upper_bound
#define mkp make_pair
#define mkt make_tuple
#define act(a,v) (get<(long long)a>(v))
#define mod 1000000007
#define mod1 998244353
#define N 1000003  //N idhar hai
#define inf 1e18
#define minf -1e18
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) >= (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define FastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define PRECISION(n) std::cout.unsetf ( std::ios::floatfield );std::cout.precision((ll)n)
#define getsm(v) accumulate(all(v),(ll)0)
#define getmx(v) max_element(all(v))
#define getmn(v) min_element(all(v))
#define wr1(a) cout<<(a)<<endl
#define wr2(a,b) cout<<(a)<<" "<<(b)<<endl
#define wr3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<endl
#define ww1(a) cout<<(a)<<"\n"
#define ww2(a,b) cout<<(a)<<" "<<(b)<<"\n"
#define ww3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<"\n"
#define FileIO freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
#define call(dr) dr.pb(mkp(1,0));dr.pb(mkp(-1,0));dr.pb(mkp(0,1));dr.pb(mkp(0,-1))
#define fill(dp,a,b) for(int i=0;i<a;i++)for(int j=0;j<b;j++)dp[i][j]=-1;
#define PI M_PI
#define fi first
#define se second
#define here cout<<"RSSB"<<endl
#define showzero cout<<std::showpoint
#define bitcount( x ) __builtin_popcountll( x )
#define ls(i) (1ll<<(i))
#define rs(i) ((i)>>1)
#define br "\n"
//#define sp " "
using namespace __gnu_pbds; //required
using namespace  std ;
typedef double db;
typedef long long ll ;
typedef vector<int>vi ;
//typedef vector<l>vl ;
typedef vector<ll>vll ;
typedef vector<vector<ll> >vvl ;
typedef pair<int,int> pii ;
typedef pair<ll,ll> pll ;
typedef vector<pll>vpll;
typedef vector<string>vstr;
typedef vector<bool>vbool ;
template <typename T> using ordered_set =  tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void READ(vll &v, ll n){ll a ;for(ll i=0 ; i<n ; i=i+1){cin>>a ;v.pb(a);}}
void PRINT(vll &v , ll a = 0){for(ll i=a ; i<v.size() ; i=i+1){/*v[i] = max((ll)0,v[i]);*/cout<<v[i]<<" " ;}cout<<"\n" ;}
double logy(ll n , ll b){if(b==0){return(-1);}if(n==1){return(0);}return((db)log10(n)/log10(b));}
long long power(long long k , long long n , long long m=mod){long long res = 1;while(n){if(n%2!=0){res = (res*k)%m ;}k = (k*k)%m ;n = n/2 ;}return(res) ;}
double power(double k , long long n ){double res = 1;while(n){if(n%2!=0){res = (res*k) ;}k = (k*k) ;n = n/2 ;}return(res) ;}
ll sign(ll i){if(i==0){return(0);}if(i>0){return(1);}return(-1);}
double distance(pll a , pll b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se-b.se))));}
double distance(pair<ll,pll> a , pair<ll,pll> b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se.fi-b.se.fi) + sqr(a.se.se - b.se.se))));}
//ll lis(vll v){ll d = sz(v);vll dis(d+1,inf);for(ll i = 0 ; i<d ; i++){*lowerB(all(dis),v[i]) = v[i];}for(ll i=0 ; i<d+1 ; i++){if(dis[i]==inf){return(i);}}return(1);}
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }//for strictly increasing use lower bound(in function lis) otherwhise use upper bound
#define lcm(a,b) ((a/gcd(a,b))*b)
const ll dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const ll dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
vpll dr;
ll n,m,k,h,a1,a2,t;
db prob;
string str;
bool ok = true;
vpll v;
void check(db q , ll b)
{
    ll c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    //temp is too high
    //p is for low
    //q is for high
    //a is for low
    //b is for high
    for(i=n-1 ; i>=0 ; i--)
    {
        c = v[i].fi;
        d = v[i].se;
        db r = 0;
        if(b-d)
        {
            r = (q-c*d)/(db)(b-d);
        }
        if(r>t)
        {
            b-=d;
            q-=c*d;
        }
        else
        {
            b-=d;
            q-=c*d;
            break;
        }
    }
    //c is temp and d is maximum value of water having temp c
    /*db lo = 0;
    db hi = d;
    z = 0;
    while(z<N)
    {
        z++;
        db mid = lo + (hi-lo)/2.0;
        db temp = 0;
        if(b+mid)
        {
            temp = (q+mid*c)/(db)(b+mid);
        }
        if(temp>=t)
        {
            hi = mid;
        }
        else
        {
            lo = mid;
        }
    }*/
    db val = 0;
    if(t-c)
    {
        val = (q-b*t)/(db)(t-c);
    }
    val+=b;
    showzero;
    ww1(val);
}
int main()
{
    FastIO;
    PRECISION(15);
    ll a,b,c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    db p,q,r,w;
    char ch,chr ;
    string str1,str2,str3,str4;
    //ll a1=0,a2=0,b1=0,b2=0,c1=0 ;
    //cin>>str>>str1;
    //Listen to Zero(Imagine Dragons!!)
    //Listen to Burn(Ellie Goulding)
    //Stay Motivated!!
    //Never use i for two or more nested loops!!
    //Range Query + Constructive + DSU +  Graph Theory + Math + Number Theory + DP(DP + DP with Bitmasks + DP on Trees) + Bitmasks + Data Structures + Strings + Geometry
    //Binary and Ternary Search + Brute Force + Greedy + Implementation
    //In a comparator function comp(pll a , pll b) if comp returns true then a comes before b otherwise b comes berfore a
    //For Longest Common Palindromic Subsequence find the Longest Common subsequence between Original Array and Reverse of the original array
    //Fuck Excuses!!Focus on how to get better
    //First Think then code
    //memset(viv,false,sof(viv));
    //memset(dp,-1,sof(dp));
    //call(dr);
    //1920
    //ThinkThinkThinkThink NOW
    cin>>n>>t;
    v.resz(n);
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].se = a;
    }
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].fi = a;
    }
    sort(all(v));
    a = 0; //total volume of water with temp less than T
    p = 0; //total temp with water having temp less than T
    b = 0;//total volume of water with temp more than T
    q = 0;//total temp with water having temp more than T
    for(i=0 ; i<n ; i++)
    {
        if(v[i].fi>=t)
        {
            b+=v[i].se;
            q+=(v[i].se*v[i].fi);
        }
        else
        {
            a+=v[i].se;
            p+=(v[i].se*v[i].fi);
        }
    }
    if(v[n-1].fi<t || v[0].fi>t)
    {
        ww1(0);
        exit(0);
    }
    r = (p+q)/(db)(a+b);
    if(r<t)
    {
        t = -t;
        for(i=0 ; i<n; i++)
        {
            v[i].fi = -v[i].fi;
        }
        sort(all(v));
        p = -p;
        q = -q;
    }
    q+=p;
    b+=a;
    check(q,b);
}
//Always Check for Binary Search(Along with Lower/Upper Bound) , Ternary Search , Greedy then go for DP , DFS , DSU  + Bridge Tree + and other stuff(described above)
//DO IT UNTIL YOU RUN OUT OF IDEAS ~ YOU KNOW WHO
//See The Editorial AN ~ YOU KNOW WHO


/*In Case of TLE -> 1.Use Int instead of Long Long
                    2.Use FastIO
                    3.Use "\n" Instead of endl
                    4.Use Vector and Arrays instead of Sets,Maps(if possible)
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> //required
#include <ext/pb_ds/tree_policy.hpp> //required
#define pb push_back
#define pf push_front
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define distinct(x) sort(all(x)); x.resize(unique(all(x))-x.begin());
#define sz(x)  (long long)(x).size()
#define sqr(x) (x)*(x)
#define sof sizeof
#define resz resize
#define ins insert
#define lowerB lower_bound
#define upperB upper_bound
#define mkp make_pair
#define mkt make_tuple
#define act(a,v) (get<(long long)a>(v))
#define mod 1000000007
#define mod1 998244353
#define N 10000003  //N idhar hai
#define inf 1e18
#define minf -1e18
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) >= (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define FastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define PRECISION(n) std::cout.unsetf ( std::ios::floatfield );std::cout.precision((ll)n)
#define getsm(v) accumulate(all(v),(ll)0)
#define getmx(v) max_element(all(v))
#define getmn(v) min_element(all(v))
#define wr1(a) cout<<(a)<<endl
#define wr2(a,b) cout<<(a)<<" "<<(b)<<endl
#define wr3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<endl
#define ww1(a) cout<<(a)<<"\n"
#define ww2(a,b) cout<<(a)<<" "<<(b)<<"\n"
#define ww3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<"\n"
#define FileIO freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
#define call(dr) dr.pb(mkp(1,0));dr.pb(mkp(-1,0));dr.pb(mkp(0,1));dr.pb(mkp(0,-1))
#define fill(dp,a,b) for(int i=0;i<a;i++)for(int j=0;j<b;j++)dp[i][j]=-1;
#define PI M_PI
#define fi first
#define se second
#define here cout<<"RSSB"<<endl
#define showzero cout<<std::showpoint
#define bitcount( x ) __builtin_popcountll( x )
#define ls(i) (1ll<<(i))
#define rs(i) ((i)>>1)
#define br "\n"
//#define sp " "
using namespace __gnu_pbds; //required
using namespace  std ;
typedef double db;
typedef long long ll ;
typedef vector<int>vi ;
//typedef vector<l>vl ;
typedef vector<ll>vll ;
typedef vector<vector<ll> >vvl ;
typedef pair<int,int> pii ;
typedef pair<ll,ll> pll ;
typedef vector<pll>vpll;
typedef vector<string>vstr;
typedef vector<bool>vbool ;
template <typename T> using ordered_set =  tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void READ(vll &v, ll n){ll a ;for(ll i=0 ; i<n ; i=i+1){cin>>a ;v.pb(a);}}
void PRINT(vll &v , ll a = 0){for(ll i=a ; i<v.size() ; i=i+1){/*v[i] = max((ll)0,v[i]);*/cout<<v[i]<<" " ;}cout<<"\n" ;}
double logy(ll n , ll b){if(b==0){return(-1);}if(n==1){return(0);}return((db)log10(n)/log10(b));}
long long power(long long k , long long n , long long m=mod){long long res = 1;while(n){if(n%2!=0){res = (res*k)%m ;}k = (k*k)%m ;n = n/2 ;}return(res) ;}
double power(double k , long long n ){double res = 1;while(n){if(n%2!=0){res = (res*k) ;}k = (k*k) ;n = n/2 ;}return(res) ;}
ll sign(ll i){if(i==0){return(0);}if(i>0){return(1);}return(-1);}
double distance(pll a , pll b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se-b.se))));}
double distance(pair<ll,pll> a , pair<ll,pll> b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se.fi-b.se.fi) + sqr(a.se.se - b.se.se))));}
//ll lis(vll v){ll d = sz(v);vll dis(d+1,inf);for(ll i = 0 ; i<d ; i++){*lowerB(all(dis),v[i]) = v[i];}for(ll i=0 ; i<d+1 ; i++){if(dis[i]==inf){return(i);}}return(1);}
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }//for strictly increasing use lower bound(in function lis) otherwhise use upper bound
#define lcm(a,b) ((a/gcd(a,b))*b)
const ll dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const ll dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
vpll dr;
ll n,m,k,h,a1,a2,t;
db prob;
string str;
bool ok = true;
vpll v;
void check(db q , ll b)
{
    ll c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    //temp is too high
    //p is for low
    //q is for high
    //a is for low
    //b is for high
    for(i=n-1 ; i>=0 ; i--)
    {
        c = v[i].fi;
        d = v[i].se;
        db r = (q-c*d)/(db)(b-d);
        if(r>t)
        {
            b-=d;
            q-=c*d;
        }
        else
        {
            b-=d;
            q-=c*d;
            break;
        }
    }
    //c is temp and d is maximum value of water having temp c
    db lo = 0;
    db hi = d;
    z = 0;
    while(hi-lo>1e-10)
    {
        z++;
        db mid = lo + (hi-lo)/2.0;
        db temp = 0;
        if(b+mid)
        {
            temp = (q+mid*c)/(db)(b+mid);
        }
        if(temp>=t)
        {
            hi = mid;
        }
        else
        {
            lo = mid;
        }
    }
    showzero;
    ww1(b+hi);
}
int main()
{
    FastIO;
    PRECISION(15);
    ll a,b,c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    db p,q,r,w;
    char ch,chr ;
    string str1,str2,str3,str4;
    //ll a1=0,a2=0,b1=0,b2=0,c1=0 ;
    //cin>>str>>str1;
    //Listen to Zero(Imagine Dragons!!)
    //Listen to Burn(Ellie Goulding)
    //Stay Motivated!!
    //Never use i for two or more nested loops!!
    //Range Query + Constructive + DSU +  Graph Theory + Math + Number Theory + DP(DP + DP with Bitmasks + DP on Trees) + Bitmasks + Data Structures + Strings + Geometry
    //Binary and Ternary Search + Brute Force + Greedy + Implementation
    //In a comparator function comp(pll a , pll b) if comp returns true then a comes before b otherwise b comes berfore a
    //For Longest Common Palindromic Subsequence find the Longest Common subsequence between Original Array and Reverse of the original array
    //Fuck Excuses!!Focus on how to get better
    //First Think then code
    //memset(viv,false,sof(viv));
    //memset(dp,-1,sof(dp));
    //call(dr);
    //1920
    //ThinkThinkThinkThink NOW
    cin>>n>>t;
    v.resz(n);
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].se = a;
    }
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].fi = a;
    }
    sort(all(v));
    a = 0; //total volume of water with temp less than T
    p = 0; //total temp with water having temp less than T
    b = 0;//total volume of water with temp more than T
    q = 0;//total temp with water having temp more than T
    for(i=0 ; i<n ; i++)
    {
        if(v[i].fi>=t)
        {
            b+=v[i].se;
            q+=(v[i].se*v[i].fi);
        }
        else
        {
            a+=v[i].se;
            p+=(v[i].se*v[i].fi);
        }
    }
    if(v[n-1].fi<t || v[0].fi>t)
    {
        ww1(0);
        exit(0);
    }
    r = (p+q)/(db)(a+b);
    if(r<t)
    {
        t = -t;
        for(i=0 ; i<n; i++)
        {
            v[i].fi = -v[i].fi;
        }
        sort(all(v));
        p = -p;
        q = -q;
    }
    q+=p;
    b+=a;
    check(q,b);
}
//Always Check for Binary Search(Along with Lower/Upper Bound) , Ternary Search , Greedy then go for DP , DFS , DSU  + Bridge Tree + and other stuff(described above)
//DO IT UNTIL YOU RUN OUT OF IDEAS ~ YOU KNOW WHO
//See The Editorial AN ~ YOU KNOW WHO


/*In Case of TLE -> 1.Use Int instead of Long Long
                    2.Use FastIO
                    3.Use "\n" Instead of endl
                    4.Use Vector and Arrays instead of Sets,Maps(if possible)
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> //required
#include <ext/pb_ds/tree_policy.hpp> //required
#define pb push_back
#define pf push_front
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define distinct(x) sort(all(x)); x.resize(unique(all(x))-x.begin());
#define sz(x)  (long long)(x).size()
#define sqr(x) (x)*(x)
#define sof sizeof
#define resz resize
#define ins insert
#define lowerB lower_bound
#define upperB upper_bound
#define mkp make_pair
#define mkt make_tuple
#define act(a,v) (get<(long long)a>(v))
#define mod 1000000007
#define mod1 998244353
#define N 200003  //N idhar hai
#define inf 1e18
#define minf -1e18
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) >= (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define FastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define PRECISION(n) std::cout.unsetf ( std::ios::floatfield );std::cout.precision((ll)n)
#define getsm(v) accumulate(all(v),(ll)0)
#define getmx(v) max_element(all(v))
#define getmn(v) min_element(all(v))
#define wr1(a) cout<<(a)<<endl
#define wr2(a,b) cout<<(a)<<" "<<(b)<<endl
#define wr3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<endl
#define ww1(a) cout<<(a)<<"\n"
#define ww2(a,b) cout<<(a)<<" "<<(b)<<"\n"
#define ww3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<"\n"
#define FileIO freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
#define call(dr) dr.pb(mkp(1,0));dr.pb(mkp(-1,0));dr.pb(mkp(0,1));dr.pb(mkp(0,-1))
#define fill(dp,a,b) for(int i=0;i<a;i++)for(int j=0;j<b;j++)dp[i][j]=-1;
#define PI M_PI
#define fi first
#define se second
#define here cout<<"RSSB"<<endl
#define showzero cout<<std::showpoint
#define bitcount( x ) __builtin_popcountll( x )
#define ls(i) (1ll<<(i))
#define rs(i) ((i)>>1)
#define br "\n"
//#define sp " "
using namespace __gnu_pbds; //required
using namespace  std ;
typedef double db;
typedef long long ll ;
typedef vector<int>vi ;
//typedef vector<l>vl ;
typedef vector<ll>vll ;
typedef vector<vector<ll> >vvl ;
typedef pair<int,int> pii ;
typedef pair<ll,ll> pll ;
typedef vector<pll>vpll;
typedef vector<string>vstr;
typedef vector<bool>vbool ;
template <typename T> using ordered_set =  tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void READ(vll &v, ll n){ll a ;for(ll i=0 ; i<n ; i=i+1){cin>>a ;v.pb(a);}}
void PRINT(vll &v , ll a = 0){for(ll i=a ; i<v.size() ; i=i+1){/*v[i] = max((ll)0,v[i]);*/cout<<v[i]<<" " ;}cout<<"\n" ;}
double logy(ll n , ll b){if(b==0){return(-1);}if(n==1){return(0);}return((db)log10(n)/log10(b));}
long long power(long long k , long long n , long long m=mod){long long res = 1;while(n){if(n%2!=0){res = (res*k)%m ;}k = (k*k)%m ;n = n/2 ;}return(res) ;}
double power(double k , long long n ){double res = 1;while(n){if(n%2!=0){res = (res*k) ;}k = (k*k) ;n = n/2 ;}return(res) ;}
ll sign(ll i){if(i==0){return(0);}if(i>0){return(1);}return(-1);}
double distance(pll a , pll b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se-b.se))));}
double distance(pair<ll,pll> a , pair<ll,pll> b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se.fi-b.se.fi) + sqr(a.se.se - b.se.se))));}
//ll lis(vll v){ll d = sz(v);vll dis(d+1,inf);for(ll i = 0 ; i<d ; i++){*lowerB(all(dis),v[i]) = v[i];}for(ll i=0 ; i<d+1 ; i++){if(dis[i]==inf){return(i);}}return(1);}
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }//for strictly increasing use lower bound(in function lis) otherwhise use upper bound
#define lcm(a,b) ((a/gcd(a,b))*b)
const ll dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const ll dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
vpll dr;
ll n,m,k,h,a1,a2,t;
db prob;
string str;
bool ok = true;
vpll v;
void check(db p , db q , ll a , ll b)
{
    ll c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    //temp is too high
    //p is for low
    //q is for high
    //a is for low
    //b is for high
    for(i=n-1 ; i>=0 ; i--)
    {
        c = v[i].fi;
        d = v[i].se;
        db r = (p+q-c*d)/(db)(a+b-d);
        if(r>t)
        {
            b-=d;
            q-=c*d;
        }
        else
        {
            b-=d;
            q-=c*d;
            break;
        }
    }
    //c is temp and d is maximum value of water having temp c
    db lo = 0;
    db hi = d;
    while(hi-lo>1e-10)
    {
        db mid = lo + (hi-lo)/2;
        db temp = (p+q+mid*c)/(db)(a+b+mid);
        if(temp>=t)
        {
            hi = mid;
        }
        else
        {
            lo = mid;
        }
    }
    showzero;
    ww1(a+b+hi);
}
int main()
{
    FastIO;
    PRECISION(10);
    ll a,b,c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    db p,q,r,w;
    char ch,chr ;
    string str1,str2,str3,str4;
    //ll a1=0,a2=0,b1=0,b2=0,c1=0 ;
    //cin>>str>>str1;
    //Listen to Zero(Imagine Dragons!!)
    //Listen to Burn(Ellie Goulding)
    //Stay Motivated!!
    //Never use i for two or more nested loops!!
    //Range Query + Constructive + DSU +  Graph Theory + Math + Number Theory + DP(DP + DP with Bitmasks + DP on Trees) + Bitmasks + Data Structures + Strings + Geometry
    //Binary and Ternary Search + Brute Force + Greedy + Implementation
    //In a comparator function comp(pll a , pll b) if comp returns true then a comes before b otherwise b comes berfore a
    //For Longest Common Palindromic Subsequence find the Longest Common subsequence between Original Array and Reverse of the original array
    //Fuck Excuses!!Focus on how to get better
    //First Think then code
    //memset(viv,false,sof(viv));
    //memset(dp,-1,sof(dp));
    //call(dr);
    //1920
    //ThinkThinkThinkThink NOW
    cin>>n>>t;
    v.resz(n);
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].se = a;
    }
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].fi = a;
    }
    sort(all(v));
    a = 0; //total volume of water with temp less than T
    p = 0; //total temp with water having temp less than T
    b = 0;//total volume of water with temp more than T
    q = 0;//total temp with water having temp more than T
    for(i=0 ; i<n ; i++)
    {
        if(v[i].fi>=t)
        {
            b+=v[i].se;
            q+=(v[i].se*v[i].fi);
        }
        else
        {
            a+=v[i].se;
            p+=(v[i].se*v[i].fi);
        }
    }
    if(v[n-1].fi<t)
    {
        ww1(-1);
        exit(0);
    }
    r = (p+q)/(db)(a+b);
    if(r<t)
    {
        t = -t;
        for(i=0 ; i<n ; i++)
        {
            v[i].fi = -v[i].fi;
        }
        sort(all(v));
        p = -p;
        q = -q;
        swap(p,q);
        swap(a,b);
    }
    check(p,q,a,b);
}
//Always Check for Binary Search(Along with Lower/Upper Bound) , Ternary Search , Greedy then go for DP , DFS , DSU  + Bridge Tree + and other stuff(described above)
//DO IT UNTIL YOU RUN OUT OF IDEAS ~ YOU KNOW WHO
//See The Editorial AN ~ YOU KNOW WHO


/*In Case of TLE -> 1.Use Int instead of Long Long
                    2.Use FastIO
                    3.Use "\n" Instead of endl
                    4.Use Vector and Arrays instead of Sets,Maps(if possible)
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> //required
#include <ext/pb_ds/tree_policy.hpp> //required
#define pb push_back
#define pf push_front
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define distinct(x) sort(all(x)); x.resize(unique(all(x))-x.begin());
#define sz(x)  (long long)(x).size()
#define sqr(x) (x)*(x)
#define sof sizeof
#define resz resize
#define ins insert
#define lowerB lower_bound
#define upperB upper_bound
#define mkp make_pair
#define mkt make_tuple
#define act(a,v) (get<(long long)a>(v))
#define mod 1000000007
#define mod1 998244353
#define N 1000003  //N idhar hai
#define inf 1e18
#define minf -1e18
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) >= (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define FastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define PRECISION(n) std::cout.unsetf ( std::ios::floatfield );std::cout.precision((ll)n)
#define getsm(v) accumulate(all(v),(ll)0)
#define getmx(v) max_element(all(v))
#define getmn(v) min_element(all(v))
#define wr1(a) cout<<(a)<<endl
#define wr2(a,b) cout<<(a)<<" "<<(b)<<endl
#define wr3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<endl
#define ww1(a) cout<<(a)<<"\n"
#define ww2(a,b) cout<<(a)<<" "<<(b)<<"\n"
#define ww3(a,b,c) cout<<(a)<<" "<<(b)<<" "<<(c)<<"\n"
#define FileIO freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
#define call(dr) dr.pb(mkp(1,0));dr.pb(mkp(-1,0));dr.pb(mkp(0,1));dr.pb(mkp(0,-1))
#define fill(dp,a,b) for(int i=0;i<a;i++)for(int j=0;j<b;j++)dp[i][j]=-1;
#define PI M_PI
#define fi first
#define se second
#define here cout<<"RSSB"<<endl
#define showzero cout<<std::showpoint
#define bitcount( x ) __builtin_popcountll( x )
#define ls(i) (1ll<<(i))
#define rs(i) ((i)>>1)
#define br "\n"
//#define sp " "
using namespace __gnu_pbds; //required
using namespace  std ;
typedef double db;
typedef long long ll ;
typedef vector<int>vi ;
//typedef vector<l>vl ;
typedef vector<ll>vll ;
typedef vector<vector<ll> >vvl ;
typedef pair<int,int> pii ;
typedef pair<ll,ll> pll ;
typedef vector<pll>vpll;
typedef vector<string>vstr;
typedef vector<bool>vbool ;
template <typename T> using ordered_set =  tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void READ(vll &v, ll n){ll a ;for(ll i=0 ; i<n ; i=i+1){cin>>a ;v.pb(a);}}
void PRINT(vll &v , ll a = 0){for(ll i=a ; i<v.size() ; i=i+1){/*v[i] = max((ll)0,v[i]);*/cout<<v[i]<<" " ;}cout<<"\n" ;}
double logy(ll n , ll b){if(b==0){return(-1);}if(n==1){return(0);}return((db)log10(n)/log10(b));}
long long power(long long k , long long n , long long m=mod){long long res = 1;while(n){if(n%2!=0){res = (res*k)%m ;}k = (k*k)%m ;n = n/2 ;}return(res) ;}
double power(double k , long long n ){double res = 1;while(n){if(n%2!=0){res = (res*k) ;}k = (k*k) ;n = n/2 ;}return(res) ;}
ll sign(ll i){if(i==0){return(0);}if(i>0){return(1);}return(-1);}
double distance(pll a , pll b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se-b.se))));}
double distance(pair<ll,pll> a , pair<ll,pll> b){return((db)(sqrt( sqr(a.fi-b.fi) + sqr(a.se.fi-b.se.fi) + sqr(a.se.se - b.se.se))));}
//ll lis(vll v){ll d = sz(v);vll dis(d+1,inf);for(ll i = 0 ; i<d ; i++){*lowerB(all(dis),v[i]) = v[i];}for(ll i=0 ; i<d+1 ; i++){if(dis[i]==inf){return(i);}}return(1);}
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }//for strictly increasing use lower bound(in function lis) otherwhise use upper bound
#define lcm(a,b) ((a/gcd(a,b))*b)
const ll dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const ll dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
vpll dr;
ll n,m,k,h,a1,a2,t;
db prob;
string str;
bool ok = true;
vpll v;
void check(db q , ll b)
{
    ll c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    //temp is too high
    //p is for low
    //q is for high
    //a is for low
    //b is for high
    for(i=n-1 ; i>=0 ; i--)
    {
        c = v[i].fi;
        d = v[i].se;
        db r = 0;
        if(b-d)
        {
            r = (q-c*d)/(db)(b-d);
        }
        if(r>t)
        {
            b-=d;
            q-=c*d;
        }
        else
        {
            b-=d;
            q-=c*d;
            break;
        }
    }
    //c is temp and d is maximum value of water having temp c
    db lo = 0;
    db hi = d;
    z = 0;
    while(z<N)
    {
        z++;
        db mid = lo + (hi-lo)/2.0;
        db temp = 0;
        if(b+mid)
        {
            temp = (q+mid*c)/(db)(b+mid);
        }
        if(temp>=t)
        {
            hi = mid;
        }
        else
        {
            lo = mid;
        }
    }
    db val = b + hi;
    showzero;
    val = max(val,(db)h);
    ww1(val);
}
int main()
{
    FastIO;
    PRECISION(15);
    ll a,b,c,d,i,j,x,y,z;//,x1,y1,z1,e,f;
    db p,q,r,w;
    char ch,chr ;
    string str1,str2,str3,str4;
    //ll a1=0,a2=0,b1=0,b2=0,c1=0 ;
    //cin>>str>>str1;
    //Listen to Zero(Imagine Dragons!!)
    //Listen to Burn(Ellie Goulding)
    //Stay Motivated!!
    //Never use i for two or more nested loops!!
    //Range Query + Constructive + DSU +  Graph Theory + Math + Number Theory + DP(DP + DP with Bitmasks + DP on Trees) + Bitmasks + Data Structures + Strings + Geometry
    //Binary and Ternary Search + Brute Force + Greedy + Implementation
    //In a comparator function comp(pll a , pll b) if comp returns true then a comes before b otherwise b comes berfore a
    //For Longest Common Palindromic Subsequence find the Longest Common subsequence between Original Array and Reverse of the original array
    //Fuck Excuses!!Focus on how to get better
    //First Think then code
    //memset(viv,false,sof(viv));
    //memset(dp,-1,sof(dp));
    //call(dr);
    //1920
    //ThinkThinkThinkThink NOW
    cin>>n>>t;
    v.resz(n);
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].se = a;
    }
    h = 0;
    for(i=0 ; i<n ; i++)
    {
        cin>>a;
        v[i].fi = a;
        if(a==t)
        {
            h = max(h,v[i].se);
        }
    }
    sort(all(v));
    a = 0; //total volume of water with temp less than T
    p = 0; //total temp with water having temp less than T
    b = 0;//total volume of water with temp more than T
    q = 0;//total temp with water having temp more than T
    for(i=0 ; i<n ; i++)
    {
        if(v[i].fi>=t)
        {
            b+=v[i].se;
            q+=(v[i].se*v[i].fi);
        }
        else
        {
            a+=v[i].se;
            p+=(v[i].se*v[i].fi);
        }
    }
    if(v[n-1].fi<t || v[0].fi>t)
    {
        ww1(0);
        exit(0);
    }
    r = (p+q)/(db)(a+b);
    if(r<t)
    {
        t = -t;
        for(i=0 ; i<n; i++)
        {
            v[i].fi = -v[i].fi;
        }
        sort(all(v));
        p = -p;
        q = -q;
    }
    q+=p;
    b+=a;
    check(q,b);
}
//Always Check for Binary Search(Along with Lower/Upper Bound) , Ternary Search , Greedy then go for DP , DFS , DSU  + Bridge Tree + and other stuff(described above)
//DO IT UNTIL YOU RUN OUT OF IDEAS ~ YOU KNOW WHO
//See The Editorial AN ~ YOU KNOW WHO