#pragma comment (linker, "/STACK:256000000")

#define _USE_MATH_DEFINES
#define _CRT_NO_DEPRECEATE
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <cstring>
#include <vector>
#include <utility>
#include <algorithm>
#include <functional>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <cmath>
#include <queue>
#include <memory.h>
#include <sstream>
#include <cassert>
#include <ctime>
#include <complex>
#include <random>
#include <bitset>

using namespace std;

typedef unsigned int uint32;
typedef long long int64;
typedef unsigned long long uint64;
typedef long double ldouble;
typedef pair<int, int> pii;
typedef pair<int64, int64> pll;
typedef pair<uint64, uint64> puu;
typedef pair<pii, pii> piiii;

#define pb push_back
#define sq(x) ((x)*(x))
#define tmin(x,y,z) (min(min((x),(y)),(z)))
#define rand32() (((unsigned int)(rand()) << 16) | (unsigned int)(rand()))
#define rand64() (((unsigned int64)(rand32()) << 16) | (unsigned int64)(rand32()))
#define bit(mask, b) ((mask >> b) & 1)
#define biton(mask, bit) (mask | (((uint32)(1)) << bit))
#define bitoff(mask, bit) (mask & (~(((uint32)(1)) << bit)))
#define bitputon(mask, bit) (mask |= (((uint32)(1)) << bit))
#define bitputoff(mask, bit) (mask &= (~(((uint32)(1)) << bit)))
#define FAIL() (*((int*)(0)))++
#define INF ((int)(1e9) + 1337)
#define LINF ((int64)(1e18))
#define EPS 1e-13
#define PI (3.1415926535897932384626433832795)
#define y1 yy1
#define y0 yy0
#define j0 jj0
//#define MOD 1000000007LL
#define HMOD 1234567913LL
#define HMOD2 1000000007LL
#define HBASE 1000003


//#ifdef _MY_DEBUG
//    #define HMOD 1000000007
//    #define HBASE (1000003LL)
//#else
//    #define HMOD ((int64)(1e18) + 3LL)
//    #define HBASE (1000037LL)
//#endif
#define MAX 2000000000
mt19937 ggen;

int n;
int64 L;
int64 a[100010];
int64 nd[100010];
int u[100010];
int l[100010];
int64 ls[100010];
int r[100010];
int64 rs[100010];

void solve()
{
    cin >> n >> L;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    priority_queue<pair<int64, int>> q;
    for (int i = 0; i < n - 1; i++)
    {
        nd[i] = a[i] + a[i + 1];
        q.push(pair<int64, int>(nd[i], i));
        
        if (i == 0)
            l[i] = -1;
        else
        {
            l[i] = i - 1;
            ls[i] = a[i];
        }
        
        if(i == n - 2)
            r[i] = -1;
        else
        {
            r[i] = i + 1;
            rs[i] = a[i + 1];
        }
    }
    vector<int> ans;
    for (int i = 0; i < n - 1; i++)
    {
        int ix = q.top().second;
        int64 len = q.top().first;
        q.pop();
        if (u[ix] || nd[ix] != len)
            continue;
        if (len < L)
        {
            cout << "Impossible";
            return;
        }
        ans.push_back(ix + 1);
        int ln = l[ix];
        int rn = r[ix];
        if (rn != -1)
        {
            l[rn] = ln;
            nd[rn] = rs[rn] + len;
            q.push(pair<int64, int>(nd[rn], rn));
        }
        if (ln != -1)
        {
            r[ln] = rn;
            nd[ln] = ls[ln] + len;
            q.push(pair<int64, int>(nd[ln], ln));
        }
    }
    cout << "Possible\n";
    for (int i = (int)ans.size() - 1; i >= 0; i--)
        cout << ans[i] << '\n';
}

#define TASK "substr"
int main()
{
    //testgen(100000);// return 0;
    ios_base::sync_with_stdio(false); cin.tie(0);
#ifdef _MY_DEBUG
    freopen("input.txt", "rt", stdin); freopen("output.txt", "wt", stdout);
#else
    //freopen(TASK ".in", "rt", stdin); freopen(TASK ".out", "wt", stdout);
#endif
    //stresstest(8); return 0;
    srand(1313);
    ggen = mt19937(13);

    solve();

    return 0;
}

Measured memory_bytes: 8812