#include <bits/stdc++.h>
using namespace std;
const int MAX = 1000000;
const double DELTA = 0.000000001;
int n;
double s;
vector<double> x, v, t;
bool check(double curr) {
  vector<pair<double, double> > v1, v2;
  bool ok1 = false;
  bool ok2 = false;
  for (int i = 0; i < n; ++i) {
    if (t[i] == 1) {
      if (x[i] < curr * v[i] + DELTA) {
        ok1 = true;
        continue;
      }
      if (x[i] > curr * (v[i] + s) + DELTA) continue;
      double y = x[i] * v[i] + curr * (s * s - v[i] * v[i]);
      y /= s;
      if (x[i] < floor(y) + DELTA) v1.push_back(make_pair(x[i], y));
    } else {
      if ((double)MAX - x[i] < curr * v[i] + DELTA) {
        ok2 = true;
        continue;
      }
      if ((double)MAX - x[i] > curr * (v[i] + s) + DELTA) continue;
      double y =
          x[i] * v[i] + (double)MAX * (s - v[i]) - curr * (s * s - v[i] * v[i]);
      y /= s;
      if (y != floor(x[i]) + DELTA) v2.push_back(make_pair(y, x[i]));
    }
  }
  if (ok1) v1.push_back(make_pair(0, MAX));
  if (ok2) v2.push_back(make_pair(0, MAX));
  if (v1.empty() || v2.empty()) return false;
  sort(v1.begin(), v1.end());
  sort(v2.begin(), v2.end());
  for (int i = 0, j = 0; i < v1.size() && j < v2.size();) {
    double left = max(v1[i].first, v2[j].first);
    double right = min(v1[i].second, v2[j].second);
    if (left < right + DELTA && left < floor(right + DELTA) + DELTA)
      return true;
    pair<double, double> rev1 = v1[i];
    swap(rev1.first, rev1.second);
    pair<double, double> rev2 = v2[j];
    swap(rev2.first, rev2.second);
    if (rev1 < rev2)
      ++i;
    else if (rev1 > rev2)
      ++j;
  }
  return false;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> s;
  x.resize(n);
  v.resize(n);
  t.resize(n);
  for (int i = 0; i < n; ++i) cin >> x[i] >> v[i] >> t[i];
  double left = 0.0;
  double right = MAX;
  for (int i = 0; i < 50; ++i) {
    double mid = (left + right) / 2.0;
    if (check(mid))
      right = mid;
    else
      left = mid;
  }
  cout << setprecision(17) << (left + right) / 2.0 << endl;
  return 0;
}
