Example

Input

3 3 1 2 4
1 2
2 3
3 1


Output

IMPOSSIBLE
import java.util.Arrays;
import java.util.Scanner;


public class Main {

    public static void main(String[] args) throws Exception {
        new Main().solve();
    }

//    int dfs(int v, int[] steps, int[][][] graph, int[] dp) {
//        int n = graph[0].length;
//        if (v == n - 1) return 0;
//        if (dp[v] != -2) return dp[v];
//        dp[v] = -1;  // ?????????????????????????????????
//        int ret = 0;
//        for (int s : steps) {
//            int retHere = -1;
//            for (int u = 0; u < n; u++) {
//                if (graph[s][v][u] != 0) {
//                    int rr = dfs(u, steps, graph, dp);
//                    if (rr != -1) {
//                        if (retHere == -1) retHere = rr + 1;
//                        retHere = Math.min(rr + 1, retHere);
//                    }
//                }
//            }
//            if (retHere == -1) return dp[v] = -1;  // ?§????????????????????????????????????????????????????????????????
//            ret = Math.max(ret, retHere);  // ??§???????????????????????????????????°??????
//        }
//        return dp[v] = ret;
//    }

    private void solve() throws Exception {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int a = sc.nextInt() - 1;
        int b = sc.nextInt() - 1;
        int c = sc.nextInt() - 1;
        int MAX_MOVE = 101;
        int[][][] graph = new int[MAX_MOVE][n][n];  // graph[from][to], watch out, this is inv graph

        for (int i = 0; i < m; i++) {
            int u = sc.nextInt() - 1;
            int v = sc.nextInt() - 1;
            graph[0][u][v] = 1;
        }

        // mat mul
        for (int step = 0; step < MAX_MOVE - 1; step++) {
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    for (int k = 0; k < n; k++) {
                        graph[step + 1][i][j] += graph[step][i][k] * graph[0][k][j];
                        graph[step + 1][i][j] = Math.min(graph[step + 1][i][j], 1);
                    }
                }
            }
        }

        // ??????????¨???????????????¨???
        // ??°?????????graph[a], graph[b], graph[c]????????????????§???????????????¨??????????????????????????????
        // ?????¨????????¬????????????DP??§?§£?????????????????????????????????
        // ????????????????????????????????????????????????????????????????????????????????´????????????????????????OK

        int[] steps = { a, b, c };
//        for (int step : steps) {
//            System.out.println(Arrays.deepToString(graph[step]));
//        }

        // ??°??????OK

        // int[][] dp = new int[8][n]; // dp[s][v] ??¶???s??§?????????v???????????¨??????????°????????????°???????????????-1
        int[] dp = new int[n];  // dp[v] ?????????v???????????¨??????????°????????????°???????????????-1????????????-2
        Arrays.fill(dp, -1);
        dp[n - 1] = 0;
        // dfs(0, steps, graph, dp);

        for (int iter = 0; iter < n; iter++) {
            for (int v = 0; v < n - 1; v++) {
                // if (dp[v] != -1) continue;
                int ret = 0;
                for (int s : steps) {
                    int retHere = -1;
                    for (int u = 0; u < n; u++) {
                        if (graph[s][v][u] != 0) {
                            int rr = dp[u];
                            if (rr != -1) {
                                if (retHere == -1) retHere = rr + 1;
                                retHere = Math.min(rr + 1, retHere);
                            }
                        }
                    }
                    if (retHere == -1) {
                        ret = -1;
                        break;  // ?§????????????????????????????????????????????????????????????????
                    }
                    ret = Math.max(ret, retHere);  // ??§???????????????????????????????????°??????
                }
                dp[v] = ret;
            }
        }

//        System.out.println(Arrays.toString(dp));
        if (dp[0] == -1) System.out.println("IMPOSSIBLE");
        else System.out.println(dp[0]);
    }

}