import qualified Data.ByteString.Char8 as C
import Data.List (nub, sort)
import Data.Maybe (fromJust)

unsafeReadInt :: C.ByteString -> Int
unsafeReadInt = fst . fromJust . C.readInt

diff :: Num a => [a] -> [a]
diff xs = zipWith (-) (tail xs) (init xs)

solve :: Integral a => a -> [a] -> Bool
solve k bs
    | k > maxB = False
    | k `elem` cs = True
    | length ds > 1 = True
    | mod (k - minB) d == 0 = True
    | otherwise = False
    where
        cs = sort bs
        ds = nub $ sort $ diff cs
        d = head ds
        minB = head cs
        maxB = last cs

main :: IO ()
main = do
    [_, k] <- fmap unsafeReadInt . C.words <$> C.getLine :: IO [Int]
    bs <- fmap unsafeReadInt . C.words <$> C.getLine :: IO [Int]
    putStrLn $ if solve k bs then "POSSIBLE" else "IMPOSSIBLE"
