// Slower C++ solution:
#include<stdio.h>

#include<cstring>

#include<iostream>

#include<string>



using namespace std;



const double eps = 1e-12;

#define REP(i, x) for (int i=0;i<x;i++)



double tmp[107][107];

double rest[107][107],rsum[107][107];

int N,M,L;

int p[107],t[107],v[107];

double pp[107];



int main()

{

    while (scanf("%d%d%d",&N,&M,&L) != EOF)

    {

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

        REP(i,N) pp[i] = p[i] / 100.0;

        REP(i,N)

        {

            REP(j,M+1) REP(k,M+1) tmp[j][k] = 0;

            tmp[0][0] = 1.00;

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

                for (int k = 0;k <= j;++k)

                {

                    tmp[j][k] = tmp[j-1][k] * (1-pp[i]);

                    if (k) tmp[j][k] += tmp[j-1][k-1] * pp[i];

                }

            for (int j = M;j >= 0;--j)

            {

                rest[i][j] = tmp[M][j];

                rsum[i][j] = tmp[M][j];

           //     cout<<rest[i][j]<<" ";

                if (j!=M) rsum[i][j] += rsum[i][j+1];

            }

        }

        REP(i,N)

        {

            double ans = 0;

            for (int times = 0;times <= M && v[i] != 0;++times)

            {

                double part = 1.00;

                double use = L / (double)v[i] + t[i] * times;

                for (int k = 0;k < N;++k)

                    if (k != i)

                    {

                        if (v[k] == 0) continue;

                        int l = 0,r = M;

                        while (l < r)

                        {

                            int mid = (l+r)>>1;

                            double total = L / (double) v[k] + t[k] * mid;

                            if (total <= use)

                                l = mid+1;

                            else r = mid;

                        }

                        double total = L / (double) v[k] + t[k] * l;

                        

                      //  --l;

                        if (total <= use)

                        {

                            part = 0.00;

                            break;

                        } else

                            part *= rsum[k][l];

                    }

                ans += rest[i][times] * part;

            }

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

        }

    }

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 3.6180477353745926x):
#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);

		}

	}

}