Example

Input

3 3 1 2 4
1 2
2 3
3 1


Output

IMPOSSIBLE
#include <bits/stdc++.h>
#define N 51
#define INF 1e9
using namespace std;
typedef long long ll;
int n,num[3];
ll rG[N];

ll mem[N][110],used[N][110];
ll dfs(int pos,int dep){
  if(dep==0) return (1LL<<pos);
  if(used[pos][dep]++) return mem[pos][dep];

  ll res=0;
  for(int i=0;i<n;i++)
    if(rG[pos]&(1LL<<i))res|=dfs(i,dep-1);
  return mem[pos][dep]=res;
}

  
int bfs(){
  vector<int> D(N,INF);
  int cnt[3][N]={};
  queue<int> Q;
  Q.push(n-1);
  D[n-1] = 0;
  
  while(!Q.empty()){
    int pos = Q.front();Q.pop();
    int cost = D[pos];
    if(pos==0) return cost;
    
    for(int k=0;k<3;k++){
      ll g = dfs(pos,num[k]);
      for(int i=0;i<n;i++) if((g>>i)&1) cnt[k][i] = 1;
    }

    for(int i=0;i<n;i++){
      if(!cnt[0][i]||!cnt[1][i]||!cnt[2][i]||D[i]<=cost+1)continue;
      Q.push(i);
      D[i] = cost+1;
    }
  }
  return 0;  
}

int main(){
  int m;
  cin>>n>>m;
  for(int i=0;i<3;i++)cin>>num[i];
  for(int i=0,a,b;i<m;i++)cin>>a>>b,rG[b-1]|=1LL<<(a-1);

  int ans = bfs();
  if(ans)cout<<ans<<endl;
  else cout<<"IMPOSSIBLE"<<endl;
  
  return 0;
}