#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1);
const int maxn = 1e5 + 10;
const long long mod = 3221225473;
int n, s;
long long x[maxn], v[maxn], t[maxn];
pair<long long, long long> seg1[maxn];
pair<long long, long long> seg2[maxn];
bool inside(int pt1, int pt2) {
  if (seg1[pt1].first >= seg2[pt2].first &&
      seg1[pt1].first <= seg2[pt2].second) {
    return true;
  }
  if (seg1[pt1].second >= seg2[pt2].first &&
      seg1[pt1].second <= seg2[pt2].second) {
    return true;
  }
  if (seg2[pt2].first >= seg1[pt1].first &&
      seg2[pt2].second <= seg1[pt1].second) {
    return true;
  }
  return false;
}
bool check(double mid) {
  int tot1 = 0;
  int tot2 = 0;
  for (int i = 0; i < n; i++) {
    if (t[i] == 1) {
      double tmp = ((v[i] + s) * mid - x[i]) / s;
      if (tmp > mid) {
        seg1[tot1++] = {x[i], 1e6};
      } else if (tmp >= 0) {
        seg1[tot1++] = {x[i], x[i] + tmp * (s - v[i])};
      }
    } else {
      double tmp = ((v[i] + s) * mid - 1e6 + x[i]) / s;
      if (tmp > mid) {
        seg2[tot2++] = {0, x[i]};
      } else if (tmp >= 0) {
        seg2[tot2++] = {ceil(x[i] - tmp * (s - v[i])), x[i]};
      }
    }
  }
  sort(seg1, seg1 + tot1);
  sort(seg2, seg2 + tot2);
  int pt1 = 0;
  int pt2 = 0;
  while (pt1 < tot1 && pt2 < tot2) {
    if (inside(pt1, pt2)) return true;
    while (pt1 < tot1 && seg1[pt1].second < seg2[pt2].first) {
      pt1++;
    }
    while (pt1 < tot1 && pt2 < tot2 && seg2[pt2].second < seg1[pt1].first) {
      pt2++;
    }
  }
  return false;
}
int main() {
  scanf("%d%d", &n, &s);
  double lw, lwo, rw, rwo;
  lw = lwo = rw = rwo = 1e6;
  for (int i = 0; i < n; i++) {
    scanf("%I64d%I64d%I64d", &x[i], &v[i], &t[i]);
    if (t[i] == 1) {
      lw = min(lw, x[i] / (v[i] + s + 0.0));
      lwo = min(lwo, x[i] / (v[i] + 0.0));
    } else {
      rw = min(rw, (1e6 - x[i]) / (v[i] + s + 0.0));
      rwo = min(rwo, (1e6 - x[i]) / (v[i] + 0.0));
    }
  }
  double tmin = 0;
  double tmax = min(max(lw, rwo), max(lwo, rw));
  double mid;
  for (int rds = 0; rds < 50; rds++) {
    mid = (tmax + tmin) / 2;
    if (check(mid)) {
      tmax = mid;
    } else {
      tmin = mid;
    }
  }
  printf("%.10lf", mid);
  return 0;
}
