#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 5;
const double INF = 0x7fffffffffff;
const double eps = 1e-8;
int n, len;
struct NODE {
  int x;
  int b;
} node[maxn];
double dp[maxn];
int pre[maxn];
int path[maxn];
double calc(double mid) {
  memset(pre, 0, sizeof(pre));
  dp[0] = 0;
  for (int i = 1; i <= n; i++) dp[i] = INF;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < i; j++) {
      if (dp[i] >
          dp[j] + sqrt(abs(node[i].x - node[j].x - len)) - mid * node[i].b) {
        pre[i] = j;
        dp[i] =
            dp[j] + sqrt(abs(node[i].x - node[j].x - len)) - mid * node[i].b;
      }
    }
  }
  return dp[n];
}
int main() {
  while (~scanf("%d%d", &n, &len)) {
    for (int i = 1; i <= n; i++) scanf("%d%d", &node[i].x, &node[i].b);
    node[0].x = 0;
    double l = 0.0, r = 1e6, ans;
    while (r - l > eps) {
      double mid = (l + r) / 2;
      if (calc(mid) < eps) {
        ans = mid;
        r = mid;
      } else
        l = mid;
    }
    calc(ans);
    int tot = 1;
    path[tot] = n;
    while (pre[path[tot]] != 0) {
      path[tot + 1] = pre[path[tot]];
      tot += 1;
    }
    for (int i = tot; i > 0; i--) printf("%d%c", path[i], i == 1 ? '\n' : ' ');
  }
  return 0;
}
