#include<bits/stdc++.h> using namespace std; using ll = long long; #define all(p) p.begin(),p.end() #define rep(i,a,b) for(int i=(int)a;i<(int)b;i++) const int mod=998244353; using ld = long double; int main(){ int N; cin>>N; ld ans=1e9; ll H; cin>>H; vector<ll> X(N),Y(N); vector p(N,vector(2,vector<ll>(3))); rep(i,0,N){ cin>>X[i]>>Y[i]; rep(j,0,2){ p[i][j][0]=X[i]*X[i]; p[i][j][1]=X[i]*Y[i]; p[i][j][2]=Y[i]*Y[i]; Y[i]=Y[i]-H; } Y[i]+=2*H; } vector<int> order(N); rep(i,0,N) order[i]=i; sort(all(order),[&](int l,int r){ return X[l]>X[r]; }); rep(i,0,N+2){ ll A,B,C; if(i<N) A=H-2*Y[i],B=X[i]*2,C=-H*X[i]; else if(i==N) A=1,B=0,C=0; else if(i==N+1) A=-1,B=0,C=0; vector<int> pos(N); vector<vector<ll>> q(2,vector<ll>(3)); auto f=[&](int ind,int ud,int s)->void{ rep(j,0,3) q[ud][j]+=s*p[ind][ud][j]; }; auto g=[&]()->ld{ ld tmp=0; rep(j,0,2){ tmp+=q[j][2]; if(q[j][0]) tmp-=(ld)(q[j][1]*q[j][1])/(ld)(q[j][0]); } return tmp; }; rep(j,0,N){ if(A*X[j]+B*Y[j]+C>=0) pos[j]=1; else pos[j]=0; f(j,pos[j],1); } rep(j,0,N+1){ ans=min(ans,g()); if(j==N) break; int a=order[j]; f(a,pos[a],-1); pos[a]=1-pos[a]; f(a,pos[a],1); } } cout<<fixed<<setprecision(20)<<ans<<"\n"; }