#include <bits/stdc++.h>
using namespace std;
void update_times(vector<vector<double> >& one) {
  for (int i = 0; i < one.size() - 1; i++) {
    if (one[i][1] > one[i + 1][1]) {
      one[i][3] = (one[i + 1][0] - one[i][0]) / (one[i][1] - one[i + 1][1]);
    } else {
      one[i][3] = 1000;
    }
  }
}
int update_velocity(vector<vector<double> >& one, int i) {
  double v1 = one[i][1];
  double v2 = one[i + 1][1];
  one[i][1] = ((one[i][2] - one[i + 1][2]) * one[i][1] +
               2 * one[i + 1][2] * one[i + 1][1]) /
              (one[i][2] + one[i + 1][2]);
  one[i + 1][1] =
      ((one[i + 1][2] - one[i][2]) * one[i + 1][1] + 2 * one[i][2] * v1) /
      (one[i][2] + one[i + 1][2]);
}
int collision(vector<vector<double> >& one, double& cur_time, double t) {
  double mn = 1000;
  for (int i = 0; i < one.size(); i++) {
    mn = min(one[i][3], mn);
  }
  if (mn + cur_time >= t) {
    for (int i = 0; i < one.size(); i++) {
      one[i][0] += one[i][1] * (t - cur_time);
    }
    cur_time = t;
    return 1;
  } else {
    for (int i = 0; i < one.size(); i++) {
      one[i][0] += one[i][1] * (mn);
    }
    cur_time += mn;
  }
  for (int i = 0; i < one.size(); i++) {
    if (one[i][3] == mn) {
      update_velocity(one, i);
    }
  }
  return -1;
}
bool sortFunc(vector<double> p1, vector<double> p2) { return p1[0] < p2[0]; }
bool byindex(vector<double> p1, vector<double> p2) { return p1[4] < p2[4]; }
int main() {
  int n;
  double t;
  cin >> n >> t;
  vector<vector<double> > one(n);
  for (int i = 0; i < n; i++) {
    double x, v, m;
    cin >> x >> v >> m;
    one[i].push_back(x);
    one[i].push_back(v);
    one[i].push_back(m);
    one[i].push_back(1000);
    one[i].push_back(i);
  }
  sort(one.begin(), one.end(), sortFunc);
  double cur_time = 0;
  update_times(one);
  while (1) {
    if (collision(one, cur_time, t) == 1) break;
    update_times(one);
  }
  sort(one.begin(), one.end(), byindex);
  for (int i = 0; i < one.size(); i++) cout << one[i][0] << endl;
}
