#include <bits/stdc++.h>
using namespace std;
namespace io {
const int L = (1 << 19) + 1;
char ibuf[L], *iS, *iT, c;
int f;
char gc() {
  if (iS == iT) {
    iT = (iS = ibuf) + fread(ibuf, 1, L, stdin);
    return iS == iT ? EOF : *iS++;
  }
  return *iS++;
}
template <class I>
void gi(I& x) {
  for (f = 1, c = gc(); c < '0' || c > '9'; c = gc())
    if (c == '-') f = -1;
  for (x = 0; c <= '9' && c >= '0'; c = gc()) x = x * 10 + (c & 15);
  x *= f;
}
};  // namespace io
using io::gc;
using io::gi;
int f[200010], s[200010], nxt[20][200010], x[200010], n, m, h, v, d, p;
vector<int> g;
void pre(int v) {
  if (!v) return;
  pre(v / 2);
  h = 0;
  d++;
  for (register int i = 1; i <= m; i++)
    if (x[f[i]] > v)
      f[++h] = f[i];
    else
      nxt[d][f[i - 1]] = f[i];
  m = h;
}
int dfs(int d, vector<int> f) {
  if (f.empty()) return 1;
  vector<int> g;
  int m = f.size(), h = 0;
  for (register int i = 1; i <= m; i++)
    for (int j = f[i - 1]; j; j = nxt[d][j]) {
      g.push_back(j);
      h++;
      if (h > d) return 0;
    }
  f = g;
  for (register int i = 1; i <= h; i++) {
    g.clear();
    for (register int j = 1; j <= h; j++)
      if (j != i) g.push_back(f[j - 1]);
    if (dfs(d - 1, g)) return 1;
  }
  return 0;
}
int main() {
  gi(n);
  gi(v);
  for (register int i = 1; i <= n; i++) gi(x[i]);
  for (register int i = n; i >= 2; i--) x[i] -= x[i - 1];
  x[1] = v + 1;
  for (register int i = 1; i <= n; i++) f[++m] = i;
  pre(v);
  f[m + 1] = n + 1;
  if (m > d + 1) {
    for (register int i = 1; i <= n; i++) puts("Impossible");
    return 0;
  }
  return 0;
}
