#include<iostream>
#include<complex>
#include<vector>

using namespace std;

typedef complex<double> P;

int x[10],y[10],h[10];
double mg;
int n,w;
double m;

bool inside(double d){
  return mg<=d&&d<=100-mg;
}

vector<P> intersection(P a,double ra,P b,double rb){
  double c=abs(b-a);
  double costheta=-(rb*rb-ra*ra-c*c)/2/ra/c;
  if(-1<=costheta&&costheta<=1){
    double theta=acos(costheta);
    double ang=arg(b-a);
    return {a+polar(ra,ang+theta),a+polar(ra,ang-theta)};
  }else{
    return {};
  }
}

bool check(double px,double py,int u=0){
  for(int i=0;i<n;i++){
    if(u>>i&1)continue;
    if(hypot(px-x[i],py-y[i])<=((h[i]>m)?m:sqrt(m*m-(m-h[i])*(m-h[i]))))return false;
  }
  return true;
}


int main(){
  for(;cin>>n>>w,n|w;){
    for(int i=0;i<n;i++){
      cin>>x[i]>>y[i]>>h[i];
    }
    double lo=0,hi=(w>50)?50:(2500.+w*w)/2/w;
    for(int i=0;i<100;i++){
      m=(lo+hi)/2;
      mg=(m<w)?m:sqrt(m*m-(m-w)*(m-w));
      bool f=false;
      f|=check(mg,mg);
      f|=check(mg,100-mg);
      f|=check(100-mg,mg);
      f|=check(100-mg,100-mg);
      double rs[10];
      for(int i=0;i<n;i++){
	double r=(m<h[i])?m:sqrt(m*m-(m-h[i])*(m-h[i]));
	rs[i]=r;
	double sql=r*r-(x[i]-mg)*(x[i]-mg);
	if(sql>=0){
	  double ly=y[i]-sqrt(sql),hy=y[i]+sqrt(sql);
	  f|=inside(ly)&&check(mg,ly,1<<i);
	  f|=inside(hy)&&check(mg,hy,1<<i);
	}
	double sqb=r*r-(y[i]-mg)*(y[i]-mg);
	if(sqb>=0){
	  double lx=x[i]-sqrt(sqb),hx=x[i]+sqrt(sqb);
	  f|=inside(lx)&&check(lx,mg,1<<i);
	  f|=inside(hx)&&check(hx,mg,1<<i);
	}
	double sqr=r*r-(100-mg-x[i])*(100-mg-x[i]);
	if(sqr>=0){
	  double ly=y[i]-sqrt(sqr),hy=y[i]+sqrt(sqr);
	  f|=inside(ly)&&check(100-mg,ly,1<<i);
	  f|=inside(hy)&&check(100-mg,hy,1<<i);
	}
	double sqt=r*r-(100-mg-y[i])*(100-mg-y[i]);
	if(sqt>=0){
	  double lx=x[i]-sqrt(sqt),hx=x[i]+sqrt(sqt);
	  f|=inside(lx)&&check(lx,100-mg,1<<i);
	  f|=inside(hx)&&check(hx,100-mg,1<<i);
	}
	for(int j=0;j<i;j++){
	  for(auto e:intersection(P(x[i],y[i]),r,P(x[j],y[j]),rs[j])){
	    if(mg<=e.real()&&e.real()<=100-mg&&mg<=e.imag()&&e.imag()<=100-mg){
	      f|=check(e.real(),e.imag(),1<<i|1<<j);
	    }
	  }
	}
      }
      if(f){
	lo=m;
      }else{
	hi=m;
      }
    }
    cout<<fixed<<lo<<endl;
  }
}
	  