#include <iostream>
#include <iomanip>
using namespace std;
long double R[10000];
long double Z[10000];
long double PI = 3.14159265354;
inline long double FInter(long double h,int i){
//clog << h <<" "<<Z[i]<<" "<<R[i];
if (h > Z[i] + R[i]) return 0;
if (h < Z[i] - R[i]) return 4.0/3.0 * PI * R[i]*R[i]*R[i];
h-=Z[i];
bool z;
if (h < 0) z = true;
else z = false;
if (h < 0) h = -h;
h/=R[i];
h = 1 - h;
long double e = 3.0;
long double pp = (h - 1.0/e + (1 - h) * (1 - h) * (1 - h)/e);
long double PreAns = R[i]*R[i]*R[i] * PI * pp;
if (z) PreAns = 4.0/3.0 * PI * R[i]*R[i]*R[i] - PreAns;
//clog <<" = "<<PreAns<<endl;
return PreAns;
}
inline long double Inter(long double L, long double R,int n){
return FInter(L,n) - FInter(R,n);
}
int main(){
int N,S;
cin >> N >> S;
long double LL = 0;
for (int i=0;i<N;i++)
cin >> R[i] >> Z[i] >> Z[i] >> Z[i];
long double fix = 100000.0*100000.0*100000.0;
for (int i=0;i<N;i++)
fix -= 4.0/3.0 * PI * R[i]*R[i]*R[i];
fix/=S;
for (int i=0;i<S;i++){
long double R = 100000;
long double L = LL;
long double K;
while (R - L > 1e-10){
K = (L+R)/2;
long double F = (K - LL) * 100000.0*100000.0;
for (int i=0;i<N;i++)
F-= Inter(LL,K,i);
if (F > fix)
R = K;
else L = K;
}
cout <<setprecision(15) << (L - LL)/1000.0<<endl;
LL = L;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmxvbmcgZG91YmxlIFJbMTAwMDBdOwpsb25nIGRvdWJsZSBaWzEwMDAwXTsKIApsb25nIGRvdWJsZSBQSSA9IDMuMTQxNTkyNjUzNTQ7CiAKaW5saW5lIGxvbmcgZG91YmxlIEZJbnRlcihsb25nIGRvdWJsZSBoLGludCBpKXsKLy9jbG9nIDw8IGggPDwiICI8PFpbaV08PCIgIjw8UltpXTsKICAgICAgICBpZiAoaCA+IFpbaV0gKyBSW2ldKSByZXR1cm4gMDsKICAgICAgICBpZiAoaCA8IFpbaV0gLSBSW2ldKSByZXR1cm4gNC4wLzMuMCAqIFBJICogUltpXSpSW2ldKlJbaV07CiAgICAgICAgaC09WltpXTsKICAgICAgICBib29sIHo7CiAgICAgICAgaWYgKGggPCAwKSB6ID0gdHJ1ZTsKICAgICAgICBlbHNlIHogPSBmYWxzZTsKICAgICAgICBpZiAoaCA8IDApIGggPSAtaDsKICAgICAgICBoLz1SW2ldOwogICAgICAgIGggPSAxIC0gaDsKICAgICAgICBsb25nIGRvdWJsZSBlID0gMy4wOwogICAgICAgIGxvbmcgZG91YmxlIHBwID0gKGggLSAxLjAvZSArICgxIC0gaCkgKiAoMSAtIGgpICogKDEgLSBoKS9lKTsKICAgICAgICBsb25nIGRvdWJsZSBQcmVBbnMgPSBSW2ldKlJbaV0qUltpXSAqIFBJICogcHA7CiAgICAgICAgaWYgKHopIFByZUFucyA9IDQuMC8zLjAgKiBQSSAqIFJbaV0qUltpXSpSW2ldIC0gUHJlQW5zOwovL2Nsb2cgPDwiID0gIjw8UHJlQW5zPDxlbmRsOwogICAgICAgIHJldHVybiBQcmVBbnM7Cn0KIAppbmxpbmUgbG9uZyBkb3VibGUgSW50ZXIobG9uZyBkb3VibGUgTCwgbG9uZyBkb3VibGUgUixpbnQgbil7CiAgICAgICAgcmV0dXJuIEZJbnRlcihMLG4pIC0gRkludGVyKFIsbik7IAp9CiAKaW50IG1haW4oKXsKICAgICAgICBpbnQgTixTOwogICAgICAgIGNpbiA+PiBOID4+IFM7CiAgICAgICAgbG9uZyBkb3VibGUgTEwgPSAwOwogICAgICAgIGZvciAoaW50IGk9MDtpPE47aSsrKQogICAgICAgICAgICAgICAgY2luID4+IFJbaV0gPj4gWltpXSA+PiBaW2ldID4+IFpbaV07CiAgICAgICAgCiAgICAgICAgbG9uZyBkb3VibGUgZml4ID0gMTAwMDAwLjAqMTAwMDAwLjAqMTAwMDAwLjA7CiAgICAgICAgZm9yIChpbnQgaT0wO2k8TjtpKyspCiAgICAgICAgICAgICAgICBmaXggLT0gNC4wLzMuMCAqIFBJICogUltpXSpSW2ldKlJbaV07CiAgICAgICAgZml4Lz1TOwogCiAgICAgICAgZm9yIChpbnQgaT0wO2k8UztpKyspewogICAgICAgICAgICAgICAgbG9uZyBkb3VibGUgUiA9IDEwMDAwMDsKICAgICAgICAgICAgICAgIGxvbmcgZG91YmxlIEwgPSBMTDsKICAgICAgICAgICAgICAgIGxvbmcgZG91YmxlIEs7CiAgICAgICAgICAgICAgICB3aGlsZSAoUiAtIEwgPiAxZS0xMCl7CiAgICAgICAgICAgICAgICAgICAgICAgIEsgPSAoTCtSKS8yOwogICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRvdWJsZSBGID0gKEsgLSBMTCkgKiAxMDAwMDAuMCoxMDAwMDAuMDsgCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPE47aSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYtPSBJbnRlcihMTCxLLGkpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoRiA+IGZpeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gSzsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBMID0gSzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvdXQgPDxzZXRwcmVjaXNpb24oMTUpIDw8IChMIC0gTEwpLzEwMDAuMDw8ZW5kbDsKICAgICAgICAgICAgICAgIExMID0gTDsKICAgICAgICB9CiAKfQ==