#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
int a[N], cnt, n, v, b[N], f[1 << 18];
set<int> s[20];
set<int>::iterator it, it2;
bool ans[N];
inline void Max(int &x, int y) {
  if (y > x) x = y;
}
int main() {
  scanf("%d%d", &n, &v);
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
  sort(a + 1, a + n + 1);
  for (int i = 2; i <= n; i++) {
    if (a[i] > a[i - 1] + v) s[0].insert(i - 1);
  }
  s[0].insert(n);
  if (s[0].size() > 18) {
    for (int i = 1; i <= n; i++) puts("Impossible");
    return 0;
  }
  for (it = s[0].begin(); it != s[0].end(); it++) {
    int tmp = v;
    cnt = 0;
    int m = 0, start;
    bool pd = false;
    it2 = it;
    if (it2 != s[0].begin()) {
      it2--;
      start = *it2 + 1;
    } else
      start = 1;
    for (int i = 1; i < start; i++) b[++m] = a[i];
    for (int i = *it + 1; i <= n; i++) b[++m] = a[i];
    do {
      cnt++;
      s[cnt].clear();
      tmp >>= 1;
      for (int i = 2; i <= m; i++) {
        if (b[i] > b[i - 1] + tmp) s[cnt].insert(i - 1);
      }
      s[cnt].insert(m);
    } while (tmp > 0);
    memset(f, 0, sizeof(f));
    for (int k = 0; k < 1 << cnt; k++) {
      if (f[k] == m) {
        pd = true;
        continue;
      }
      for (int j = 1; j <= cnt; j++)
        if (!(k >> j - 1 & 1)) {
          Max(f[k + (1 << j - 1)], *s[j].upper_bound(f[k]));
        }
    }
    for (int i = start; i <= *it; i++) ans[i] = pd;
  }
  for (int i = 1; i <= n; i++)
    if (ans[i])
      puts("Possible");
    else
      puts("Impossible");
  return 0;
}
