Example

Input

3 3 1 2 4
1 2
2 3
3 1


Output

IMPOSSIBLE
#include<bits/stdc++.h>
using namespace std;

using Graph=vector<vector<int>>;
using ll=long long;
const int INF=1e9;
int main(){
    int n,m;
    int abc[3];
    cin>>n>>m>>abc[0]>>abc[1]>>abc[2];
    Graph g(n);
    for(int i=0;i<m;i++){
        int u,v;
        cin>>u>>v;
        u--,v--;
        g[u].push_back(v);
    }
    vector<int> d(n,INF);
    d[n-1]=0;
    for(int loop=0;loop<n;loop++){
        vector<int> dnext=d;
        for(int x=0;x<n;x++){
            if(d[x]<INF) continue;
            for(int i=0;i<3;i++){
                vector<vector<int>> used(n,vector<int>(abc[i]+1));
                function<bool(int,int)> dfs=[&](int v,int rest){
                    if(rest==0) return d[v]<INF;
                    if(used[v][rest]) return false;
                    used[v][rest]=true;
                    for(int to:g[v]) if(dfs(to,rest-1)) return true;
                    return false;
                };
                if(!dfs(x,abc[i])) break;
                if(i==2){
                    dnext[x]=loop+1;
                }
            }
        }
        d=dnext;
    }
    if(d[0]>=INF){
        cout<<"IMPOSSIBLE"<<endl;
    }
    else{
        cout<<d[0]<<endl;
    }
    return 0;
}
