#include <bits/stdc++.h>
const int maxn = 3e3 + 50, maxm = 3e5 + 50;
using namespace std;
struct node {
  double x, b;
} p[maxn];
double dp[maxn];
int pre[maxn];
int n, m;
inline bool check(double x) {
  memset(dp, 0, sizeof dp);
  memset(pre, -1, sizeof pre);
  for (register int i = 1; i <= n; ++i) {
    dp[i] = -1e16;
    for (register int j = i - 1; j >= 0; --j) {
      double t = dp[j] + x * p[i].b - sqrt(abs(p[i].x - p[j].x - m));
      if (t > dp[i]) dp[i] = t, pre[i] = j;
    }
  }
  return dp[n] > 0;
}
inline void print(int u) {
  if (u == 0) return;
  print(pre[u]);
  printf("%d%c", u, u == n ? '\n' : ' ');
}
int main(void) {
  scanf("%d%d", &n, &m);
  p[0].x = p[0].b = 0;
  for (int i = 1; i <= n; i++) scanf("%lf%lf", &p[i].x, &p[i].b);
  double bot = 0, top = 1e7, mid;
  while (top - bot > 1e-10) {
    mid = (bot + top) / 2;
    if (check(mid))
      top = mid;
    else
      bot = mid;
  }
  check(mid);
  print(n);
  return 0;
}
