#include <bits/stdc++.h>
using namespace std;
struct node {
  int m, n;
  double p, s;
};
bool mysort(const node &a, const node &b) { return a.p < b.p; }
bool mycmp(const node &a, const node &b) { return a.n < b.n; }
int main() {
  int n, t;
  double tp = .0;
  vector<node> ball;
  scanf("%d %d", &n, &t);
  ball.resize(n);
  for (int i = 0; i < n; ++i) {
    scanf("%lf %lf %d", &ball[i].p, &ball[i].s, &ball[i].m);
    ball[i].n = i + 1;
  }
  sort(ball.begin(), ball.end(), mysort);
  while (true) {
    int fg = -1;
    double mn = 111.0;
    for (int i = 0; i < n - 1; ++i) {
      if (ball[i].s - ball[i + 1].s > .0) {
        double temp = (ball[i + 1].p - ball[i].p) / (ball[i].s - ball[i + 1].s);
        if (temp + tp < t && temp < mn) {
          mn = temp;
          fg = i;
        }
      }
    }
    if (-1 == fg) {
      break;
    }
    tp += mn;
    for (int i = 0; i < n; ++i) {
      ball[i].p += ball[i].s * mn;
    }
    double a = ((ball[fg].m - ball[fg + 1].m) * ball[fg].s +
                2 * ball[fg + 1].m * ball[fg + 1].s) /
               (ball[fg].m + ball[fg + 1].m);
    double b = ((ball[fg + 1].m - ball[fg].m) * ball[fg + 1].s +
                2 * ball[fg].m * ball[fg].s) /
               (ball[fg].m + ball[fg + 1].m);
    ball[fg].s = a;
    ball[fg + 1].s = b;
  }
  if (t - tp > 0) {
    for (int i = 0; i < n; ++i) {
      ball[i].p += ball[i].s * (t - tp);
    }
  }
  sort(ball.begin(), ball.end(), mycmp);
  for (int i = 0; i < n; ++i) {
    printf("%lf\n", ball[i].p);
  }
  return 0;
}
