#include <bits/stdc++.h>
using namespace std;
template <typename Tp>
inline void read(Tp &x) {
  x = 0;
  int f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  x *= f;
}
int buf[42];
template <typename Tp>
inline void write(Tp x) {
  int p = 0;
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (x == 0) {
    putchar('0');
    return;
  }
  while (x) {
    buf[++p] = x % 10;
    x /= 10;
  }
  for (int i = p; i; i--) putchar('0' + buf[i]);
}
const int N = 100000 + 5;
int n, s;
int x[N], v[N], t[N];
inline bool conclude(int l1, int r1, int l2, int r2) {
  if (l1 > r2 || l2 > r1) return false;
  return true;
}
bool check(long double T) {
  vector<pair<int, int> > segl, segr;
  auto gety = [&](long double vi, long double xi) {
    return (T * (1.0 * s * s - 1.0 * vi * vi) + 1.0 * vi * xi) / s;
  };
  for (int i = 1; i <= n; i++) {
    if (t[i] == 1) {
      if (1.0 * x[i] <= v[i] * T) {
        segl.push_back(make_pair(0, 1000000));
        continue;
      }
      long double y = gety(v[i], x[i]);
      int L = max(0, x[i]);
      int R = min(1000000ll, (long long)floor(y));
      if (L > R) continue;
      segl.push_back(make_pair(L, R));
    } else {
      if (1.0 * (1000000 - x[i]) <= v[i] * T) {
        segr.push_back(make_pair(0, 1000000));
        continue;
      }
      long double y = 1000000.0 - gety(v[i], 1000000 - x[i]);
      int L = max(0ll, (long long)ceil(y));
      int R = min(1000000, x[i]);
      if (L > R) continue;
      segr.push_back(make_pair(L, R));
    }
  }
  for (int i = 0; i < (int)(segl).size(); i++) {
    for (int j = 0; j < (int)(segr).size(); j++) {
      if (conclude(segl[i].first, segl[i].second, segr[j].first,
                   segr[j].second)) {
        return true;
      }
    }
  }
  return false;
}
int main() {
  scanf("%d%d", &n, &s);
  for (int i = 1; i <= n; i++) scanf("%d%d%d", x + i, v + i, t + i);
  long double L = 0, R = 1000000.0, ans = R;
  while (R - L > 1e-8) {
    long double M = (L + R) / 2.0;
    if (check(M)) {
      R = M;
      ans = M;
    } else
      L = M;
  }
  printf("%.10Lf\n", ans);
  return 0;
}
