#include <bits/stdc++.h>
using namespace std;
int K, N, V, sz[20], x[200009], maxPref[200009], pf[200009], sf[200009],
    lft[17][200009], rgt[17][200009];
int main() {
  scanf("%d %d", &N, &V);
  for (int i = 1; i <= N; i++) scanf("%d", &x[i]);
  for (int i = 0; (1 << i) <= V; i++) sz[i] = V >> i, K = i;
  sz[++K] = 0;
  for (int i = 0; i <= K; i++) {
    lft[i][1] = 1, lft[i][0] = 0;
    for (int j = 2; j <= N; j++)
      if (x[j] - x[j - 1] <= sz[i])
        lft[i][j] = lft[i][j - 1];
      else
        lft[i][j] = j;
    rgt[i][N] = N, rgt[i][N + 1] = N + 1;
    for (int j = N - 1; j >= 1; j--)
      if (x[j + 1] - x[j] <= sz[i])
        rgt[i][j] = rgt[i][j + 1];
      else
        rgt[i][j] = j;
  }
  int lim = 1 << K;
  for (int i = 0; i < lim; i++) sf[i] = N + 1;
  for (int msk = 0; msk < lim; msk++)
    for (int i = 0; i < K; i++)
      if ((msk & (1 << i)) == 0)
        pf[msk | (1 << i)] = max(pf[msk | (1 << i)], rgt[i + 1][pf[msk] + 1]),
                       sf[msk | (1 << i)] =
                           min(sf[msk | (1 << i)], lft[i + 1][sf[msk] - 1]);
  for (int i = 0; i <= N + 1; i++) maxPref[i] = -N;
  for (int i = 0; i < lim; i++)
    maxPref[sf[i]] = max(maxPref[sf[i]], pf[(lim - 1) ^ i]);
  for (int i = 1; i <= N + 1; i++) maxPref[i] = max(maxPref[i - 1], maxPref[i]);
  for (int i = 1; i <= N; i++)
    if (maxPref[rgt[0][i] + 1] >= lft[0][i] - 1)
      printf("Possible\n");
    else
      printf("Impossible\n");
  return 0;
}
