#include <bits/stdc++.h>
using namespace std;
int n;
int l[200005][30], r[200005][30];
int a[200005];
void pre_work(int wh, int v) {
  l[0][wh] = 0;
  l[1][wh] = 0;
  for (int i = 2; i <= n; i++) {
    if (a[i - 1] - a[i - 2] <= v)
      l[i][wh] = l[i - 1][wh];
    else
      l[i][wh] = i - 1;
  }
  r[n][wh] = n;
  r[n - 1][wh] = n;
  for (int i = n - 2; i >= 0; i--) {
    if (a[i + 1] - a[i] <= v)
      r[i][wh] = r[i + 1][wh];
    else
      r[i][wh] = i + 1;
  }
}
int f[200005], f2[200005];
int main() {
  int V;
  scanf("%d%d", &n, &V);
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  int g = 0;
  for (int x = V; x; x >>= 1) {
    pre_work(g++, x);
  }
  pre_work(g++, 0);
  for (int i = 0; i < (1 << g); i++) f[i] = 0;
  for (int i = 0; i < (1 << g); i++) {
    for (int j = 0; j < g; j++) {
      if ((1 << j) & i) continue;
      f[i | (1 << j)] = max(f[i | (1 << j)], r[f[i]][j]);
    }
  }
  for (int i = 0; i < (1 << g); i++) f2[i] = n;
  for (int i = 0; i < (1 << g); i++) {
    for (int j = 0; j < g; j++) {
      if ((1 << j) & i) continue;
      f2[i | (1 << j)] = min(f2[i | (1 << j)], l[f2[i]][j]);
    }
  }
  if (f[(1 << g) - 1] < n) {
    for (int i = 0; i < n; i++) puts("Impossible");
    return 0;
  }
  int L, R;
  L = 1;
  for (L = 0; L < n; L = R) {
    bool ok = 0;
    R = r[L][0];
    for (int j = 0; j < (1 << g); j++) {
      if (j & 1) continue;
      if (f[j] >= L && f2[(1 << g) - 2 - j] <= R) {
        ok = 1;
        break;
      }
    }
    for (int j = L; j < R; j++) {
      if (!ok)
        puts("Impossible");
      else
        puts("Possible");
    }
  }
  return 0;
}
