#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 100, maxlg = 17;
const long long inf = 2e18, mod = 1e9 + 7;
int n, v, vols[maxlg], volCount, nxt[maxlg][maxn], dp[(1 << maxlg)];
long long x[maxn], a[maxn];
bool ans[maxn];
set<int> counter;
void printAnsAndExit() {
  for (int i = 0; i < n; i++) {
    cout << (ans[i] ? "Possible" : "Impossible") << endl;
  }
  exit(0);
}
void solve(int l, int r) {
  memset(dp, 0, sizeof(dp));
  for (int mask = 0; mask < (1 << (volCount - 1)); mask++) {
    for (int bit = 0; bit < volCount - 1; bit++) {
      if (!((mask >> bit) & 1)) {
        int val = nxt[bit][dp[mask]] + 1;
        if (l <= val && val <= r) {
          val = r + 1;
        }
        dp[mask | (1 << bit)] = max(dp[mask | (1 << bit)], val);
      }
    }
  }
  int mx = *max_element(dp, dp + (1 << maxlg));
  if (mx == n) {
    for (int i = l; i <= r; i++) {
      ans[i] = true;
    }
  }
}
void solveAll() {
  for (int i = 0; i < n; i++) {
    counter.insert(nxt[volCount - 1][i]);
  }
  if (counter.size() > volCount) {
    printAnsAndExit();
  }
  int l = 0, r = 0;
  for (int i = 1; i < n; i++) {
    if (nxt[volCount - 1][r] == nxt[volCount - 1][i]) {
      r++;
    } else {
      solve(l, r);
      r++;
      l = r;
    }
  }
  solve(l, r);
}
void calcVols(int v) {
  int count = 0, tmp = v;
  while (tmp) {
    tmp /= 2;
    count++;
  }
  volCount = ++count;
  while (count) {
    vols[--count] = v;
    v /= 2;
  }
}
void calcNxt() {
  for (int vol = 0; vol < volCount; vol++) {
    int l = 0, r = 0;
    while (r < n - 1) {
      if (x[r + 1] - x[r] <= vols[vol]) {
        r++;
      } else {
        while (l <= r) {
          nxt[vol][l] = r;
          l++;
        }
        r++;
      }
    }
    while (l <= r) {
      nxt[vol][l] = r;
      l++;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> v;
  for (int i = 0; i < n; i++) {
    cin >> x[i];
    a[i] = x[i];
  }
  calcVols(v);
  calcNxt();
  solveAll();
  printAnsAndExit();
}
