// Slower C++ solution:
#include <iostream>

#include <algorithm>

#include <cstdlib>

#include <iostream>

#include <algorithm>

#include <cstdlib>

#include <cstring>

#include <string>

#include <vector>

#include <cstdio>

#include <queue>

#include <stack>

#include <cmath>

#include <time.h>

using namespace std;



#define LL long long 

#define clr(x) memset(x,0,sizeof(x))

#define eps 1e-6

#define PI 3.1415926535897932384626433832795028          

#define MAXN 105



struct number{

   

	LL p,t,v;

    double c[MAXN];

	double ps[MAXN];



}mem[MAXN];



LL c[55][55];



void C()

{

	 for(LL i = 0;i < 55; i++ )

	       c[0][i]=1;

	 for(LL i = 1;i < 55; i++ )

	 {

		 for(LL j = i;j < 55; j++ )



			 c[i][j]=c[i-1][j-1]+c[i][j-1];

		 

	 }

	 

}



int main()

{



	LL n,m,l,p,t,v;

	C();

	while(scanf("%lld%lld%lld", &n, &m, &l)!=EOF)

	{

		 for(LL i = 0 ;i < n; i++ )

		 {

			 scanf("%lld%lld%lld", &mem[i].p, &mem[i].t, &mem[i].v); 

			 

			 mem[i].c[0]=l*1.0/mem[i].v;

			 for(int j = 1 ;j <= m; j++)

			 {

				mem[i].c[j]+=mem[i].t+mem[i].c[j-1];

			 }

            mem[i].ps[0]=c[0][m]*pow(mem[i].p/100.0,0.0)*pow(1.0-mem[i].p/100.0,m*1.0);

			for(int j = 1; j <= m; j++ )

				mem[i].ps[j]=c[j][m]*(double)pow(mem[i].p/100.0,j*1.0)*pow(1.0-mem[i].p/100.0,(m-j)*1.0);

			//for(int j = 0; j <= m; j++ )

				//printf("%lf ",mem[i].ps[j]);

		 }



		  for(LL i = 0; i< n ; i++ )

		  {

			  double tp,pp=0.0;

			  for(LL j = 0; j <= m; j++ )

			  {

				  tp=mem[i].ps[j];



				  for(LL k = 0; k < n; k++ )

				  {

					  double t=0.0;

					  if(k==i)

						  continue;

					  for(LL q = 0; q <= m; q++ )

						  if(mem[k].c[q]>mem[i].c[j]+eps)

							  t+=mem[k].ps[q];

					  tp*=t;

				  }



				   pp+=tp;

			  }

			  

			  printf("%lf\n",pp);

		  }

	 

	}

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 4.0423493922763845x):
#include <cstdio>

#include <algorithm>

using namespace std;



const double EPS = 1e-8;

const int N = 105;

const int M = 55;



int n, m, l, t[N], v[N];

double dp[N][M];

double sum[N][M];



void gao(double p, double dp[], double sum[]) {

	double q = 1-p, f[2][M] = {};

	f[0][0] = 1;

	for (int i = 1, x = 1; i <= m; ++i, x^=1) {

		f[x][0] = f[!x][0] * q;

		for (int j = 1; j <= i; ++j) {

			f[x][j] = f[!x][j-1] * p + f[!x][j] * q;

		}

	}

	dp[m+1] = sum[m+1] = 0;

	for (int i = m, x = m & 1; i >= 0; --i) {

		sum[i] = sum[i+1] + (dp[i] = f[x][i]);

	}

}



// return true if (i,j) < (x,y)

bool faster(int i, int j, int x, int y) {

	return l*v[x] + t[i]*j*v[i]*v[x] < l*v[i] + t[x]*y*v[i]*v[x];

}



int binsearch(int i, int j, int k) {

	int l = -1, r = m+1, mid;

	while (l + 1 < r) {

		mid = (l+r)>>1;

		faster(i,j,k,mid) ? r=mid : l=mid;

	}

	return r;

}



void debug(double a[], int s, int t) {

	for(int i=s;i<t;++i)printf("%f ", a[i]);puts("");

}



int main() {

	while (3==scanf("%d%d%d", &n, &m, &l)) {

		for (int p,i = 0; i < n; ++i) {

			scanf("%d%d%d", &p, &t[i], &v[i]);

			gao(p/100., dp[i], sum[i]);

//			debug(dp[i], 0, m+2);

//			debug(sum[i], 0, m+2); 

		}

		for (int i = 0; i < n; ++i) {

			double ans = 0;

			for (int j = 0; j <= m; ++j) {

				double p = dp[i][j];

				for (int r,k = 0; k < n; ++k) {

					if (i == k) continue;

					r = binsearch(i, j, k);

					p *= sum[k][r];

				}

				ans += p;

			}

			printf("%.10f\n", ans);

		}

	}

}