// Arup Guha
// 2/12/2017
// Solution to German Programming Contest Problem C: Knapsack in a Globalized World

import java.util.*;

public class c {

	public static void main(String[] args) {

		Scanner stdin = new Scanner(System.in);
		int n = stdin.nextInt();

		long limit = stdin.nextLong();

		// Read in the values.
		int[] vals = new int[n];
		for (int i=0; i<n; i++)
			vals[i] = stdin.nextInt();

		// Our target is small, just run regular knapsack.
		if (limit < 1000000L) {

			boolean[] dp = new boolean[(int)limit + 1];
			dp[0] = true;

			// Our usual DP.
			for (int i=0; i<n; i++)
				for (int j=vals[i]; j<dp.length; j++)
					if (dp[j-vals[i]])
						dp[j] = true;

			// Print result.
			if (dp[dp.length-1])
				System.out.println("possible");
			else
				System.out.println("impossible");
		}

		else {

			// dp[i] = can i fill i+limit-1000000.
			// A million is good enough since all items are 1000 or less and 1000000 = 1000^2.
			// So some solution will exist without more than 1000 copies of a particular item.
			boolean[] dp = new boolean[1000001];

			// Here we put each multiple of vals[i] as true in the range [limit-1000000...limit].
			for (int i=0; i<n; i++)
				for (int j=0; j<dp.length; j++)
					if (((j+limit-1000000)%vals[i]) == 0)
						dp[j] = true;

			// Now, we run regular knapsack here on this interval of the knapsack array.
			for (int i=0; i<n; i++)
				for (int j=vals[i]; j<dp.length; j++)
					if (dp[j-vals[i]])
						dp[j] = true;

			// Ta da!
			if (dp[dp.length-1])
				System.out.println("possible");
			else
				System.out.println("impossible");
		}
	}
}