#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1005;
const double inf = 1e9 + 5;
const double inf1 = 1e12 + 5;
const double eps = 0.00000001;
int n, L;
pair<double, double> a[MAXN];
int last[MAXN];
double dp[MAXN];
vector<int> answer;
bool check(double x) {
  dp[0] = 0;
  for (int i = 1; i < n; i++) {
    dp[i] = inf1;
    for (int j = 0; j < i; j++) {
      dp[i] = min(dp[i], dp[j] + (sqrt(abs((a[i].first - a[j].first) - L)) -
                                  x * a[i].second));
    }
  }
  if (dp[n - 1] <= 0) return true;
  return false;
}
void restore(double x) {
  dp[0] = 0;
  last[0] = -1;
  for (int i = 1; i < n; i++) {
    dp[i] = inf * 1000;
    for (int j = 0; j < i; j++) {
      if (dp[i] > dp[j] + (sqrt(abs((a[i].first - a[j].first) - L)) -
                           x * a[i].second)) {
        dp[i] = dp[j] +
                (sqrt(abs((a[i].first - a[j].first) - L)) - x * a[i].second);
        last[i] = j;
      }
    }
  }
  int current = n - 1;
  while (current != 0) {
    answer.push_back(current);
    current = last[current];
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  a[0] = {0, 0};
  double l, r, mid;
  cin >> n >> L;
  for (int i = 1; i <= n; i++) {
    cin >> a[i].first >> a[i].second;
  }
  n++;
  l = 0;
  r = inf;
  for (int i = 0; i < 300; i++) {
    mid = (l + r) / 2;
    if (check(mid) == true)
      r = mid;
    else
      l = mid + eps;
  }
  restore(r);
  for (int i = answer.size() - 1; i >= 0; i--) {
    cout << answer[i] << " ";
  }
  cout << '\n';
}
