import Control.Applicative( (<$>))
import Data.IntSet( fromList, toAscList, member, deleteFindMin)
import qualified Data.IntSet as IS

main = do
    let
	readLine = Prelude.map read . words <$> getLine

    [n_, k_] <- readLine
    as_ <- readLine
    let
	aset = fromList as_

	(minA, taleSet) = deleteFindMin aset

	parts = toAscList $ IS.map (`gcd` minA) taleSet

	candidate = dropWhile (k_>=) $ toAscList aset

	toMake = (subtract k_) <$> candidate

	check _	    []		    _	    = False
	check []    _		    _	    = False
	check prts targets@(t:ts) []	    = check prts ts prts
	check prts targets@(t:ts) (p:ps)
	  | t `rem` p == 0		= True
	  | otherwise			= check prts ts ps

    putStr $ if k_ `member` aset    || check parts toMake parts
		then "POSSIBLE"
		else "IMPOSSIBLE"