import java.util.*; public class f { final int GRPSIZE = 1000; final static float VERTSLOPE = Float.POSITIVE_INFINITY; final static float VERTY = Float.NEGATIVE_INFINITY; public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int p = in.nextInt(); int points[][] = new int[n][2];// 0 is x, 1 is y int needed = n * p / 100; for (int i = 0; i < n; i++) { points[i][0] = in.nextInt(); points[i][1] = in.nextInt(); } in.close(); for (int i = 0; i < Math.min(n-1, 200); i++) { // select a random point int index = (int) (Math.random() * n); if (fits(points, n, points[index][0], points[index][1], needed)) { System.out.println("possible"); return; } } System.out.println("impossible"); } public static boolean fits(int[][] points, int n, int x1, int y1, int needed) { HashMap cts = new HashMap(); for (int i = 0; i < n; i++) { int dx = points[i][0] - x1; int dy = points[i][1] - y1; float slope; float yint = 0; if (dx == 0) { slope = VERTSLOPE; } else slope = dy / dx; long key = float2long(slope, yint); if (cts.containsKey(key)) cts.put(key, cts.get(key) + 1); else cts.put(key, 1); } int maxcnt = 0; for (int v : cts.values()) if (v > maxcnt) maxcnt = v; if (maxcnt >= needed) return true; else return false; } public static long float2long(float x, float y) { long i = 0; i += Float.floatToIntBits(x) << 16; i += Float.floatToIntBits(y); return i; } }