#include <bits/stdc++.h>
using namespace std;
int dpl[200100], dpr[200100];
int val[200100];
int nex[200100][20], las[200100][20];
int a[200100];
int b[20], k = -1;
int f[200100];
int main() {
  int n, v;
  scanf("%d%d", &n, &v);
  while (v) {
    b[++k] = v;
    v /= 2;
  }
  b[++k] = 0;
  for (int i = 0; i <= k; i++)
    if (i < k - i) swap(b[i], b[k - i]);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int j = 0; j <= k; j++) {
    nex[n][j] = n;
    nex[n + 1][j] = n;
    las[1][j] = 1;
    las[0][j] = 1;
  }
  for (int i = n - 1; i >= 1; i--)
    for (int j = 0; j <= k; j++) {
      if (a[i + 1] - a[i] <= b[j])
        nex[i][j] = nex[i + 1][j];
      else
        nex[i][j] = i;
    }
  for (int i = 2; i <= n; i++)
    for (int j = 0; j <= k; j++) {
      if (a[i] - a[i - 1] <= b[j])
        las[i][j] = las[i - 1][j];
      else
        las[i][j] = i;
    }
  for (int i = 0; i < (1 << k); i++) {
    for (int j = 0; j < k; j++) {
      if (i & (1 << j)) continue;
      if (nex[dpl[i] + 1][j] > dpl[i | (1 << j)])
        dpl[i | (1 << j)] = nex[dpl[i] + 1][j];
    }
  }
  for (int i = 0; i < (1 << k); i++) dpr[i] = n + 1;
  for (int i = 0; i < (1 << k); i++) {
    for (int j = 0; j < k; j++) {
      if (i & (1 << j)) continue;
      if (las[dpr[i] - 1][j] < dpr[i | (1 << j)])
        dpr[i | (1 << j)] = las[dpr[i] - 1][j];
    }
  }
  for (int i = 1; i <= n; i++) f[i] = n + 1;
  for (int i = 0; i < (1 << k); i++)
    if (dpr[((1 << k) - 1) ^ i] - 1 < f[dpl[i] + 1])
      f[dpl[i] + 1] = dpr[((1 << k) - 1) ^ i] - 1;
  int r, mn;
  for (int i = 1; i <= n; i = r + 1) {
    r = nex[i][k], mn = n + 1;
    for (int j = i; j <= r; j++)
      if (f[j] < mn) mn = f[j];
    if (mn <= r) {
      for (int j = i; j <= r; j++) printf("Possible\n");
    } else {
      for (int j = i; j <= r; j++) printf("Impossible\n");
    }
  }
  return 0;
}
