#include <bits/stdc++.h>
using namespace std;
int get() {
  char ch;
  while (ch = getchar(), (ch < '0' || ch > '9') && ch != '-')
    ;
  if (ch == '-') {
    int s = 0;
    while (ch = getchar(), ch >= '0' && ch <= '9') s = s * 10 + ch - '0';
    return -s;
  }
  int s = ch - '0';
  while (ch = getchar(), ch >= '0' && ch <= '9') s = s * 10 + ch - '0';
  return s;
}
const int N = 200005;
const int L = 20;
int n, V;
int a[N];
int val[L], k;
int rig[N][L], lef[N][L];
int f[N], g[N];
int ad[N];
int main() {
  n = get();
  V = get();
  for (int i = 1; i <= n; i++) a[i] = get();
  val[k = 1] = V;
  for (; val[k]; k++) val[k + 1] = val[k] / 2;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= k; j++) lef[i][j] = i;
    if (i > 1)
      for (int j = 1; j <= k; j++)
        if (val[j] >= a[i] - a[i - 1]) lef[i][j] = lef[i - 1][j];
  }
  for (int i = n; i >= 1; i--) {
    for (int j = 1; j <= k; j++) rig[i][j] = i;
    if (i < n)
      for (int j = 1; j <= k; j++)
        if (val[j] >= a[i + 1] - a[i]) rig[i][j] = rig[i + 1][j];
  }
  for (int i = 0; i <= (1 << (k - 1)) - 1; i++) f[i] = 0, g[i] = n + 1;
  for (int i = 0; i <= (1 << (k - 1)) - 1; i++) {
    for (int j = 2; j <= k; j++)
      if ((i & (1 << (j - 2))) == 0) {
        if (f[i] == n)
          f[i | (1 << (j - 2))] = n;
        else
          f[i | (1 << (j - 2))] = max(f[i | (1 << (j - 2))], rig[f[i] + 1][j]);
        if (g[i] == 1)
          g[i | (1 << (j - 2))] = 1;
        else
          g[i | (1 << (j - 2))] = min(g[i | (1 << (j - 2))], lef[g[i] - 1][j]);
      }
  }
  for (int i = 0; i <= (1 << (k - 1)) - 1; i++) {
    int r = f[i], l = g[((1 << (k - 1)) - 1) ^ i];
    r = min(r, n);
    l = max(l, 1);
    if (r < n) r = rig[r + 1][1];
    if (l > 1) l = lef[l - 1][1];
    if (l <= r) ad[l]++, ad[r + 1]--;
  }
  for (int i = 1; i <= n; i++) ad[i] += ad[i - 1];
  for (int i = 1; i <= n; i++)
    if (ad[i])
      printf("Possible\n");
    else
      printf("Impossbile\n");
  return 0;
}
