Example

Input

3 3 1 2 4
1 2
2 3
3 1


Output

IMPOSSIBLE
#include<bits/stdc++.h>
using namespace std;
int n,m,a[3];
vector<int> rG[50];

int d[50],c[50];
bool dp[101][50][50];

void init(int si){
  dp[0][si][si]=true;
  for(int i=0;i<100;i++){
    for(int j=0;j<n;j++){
      if(!dp[i][si][j])continue;
      for(int k=0;k<(int)rG[j].size();k++){
        int w=rG[j][k];
        dp[i+1][si][w]=true;
      }
    }
  }
}

void solve(){
  memset(c,0,sizeof(c));
  memset(d,-1,sizeof(d));
  queue<int> Q;
  Q.push(n-1);
  d[n-1]=0;
  while(!Q.empty()){
    int pos=Q.front();Q.pop();
    if(pos==0){
      cout<<d[pos]<<endl;
      return;
    }
    for(int i=0;i<3;i++){
      for(int to=0;to<n;to++){
        if(!dp[a[i]][pos][to])continue;
        c[to]|=(1<<i);
        if(c[to]==7&&d[to]==-1){
          d[to]=d[pos]+1;
          Q.push(to);
        }
      }
    }
  }
  cout<<"IMPOSSIBLE"<<endl;
}

int main(){
  cin>>n>>m;
  for(int i=0;i<3;i++)cin>>a[i];
  for(int i=0;i<m;i++){
    int from,to;
    cin>>from>>to;
    from--,to--;
    rG[to].push_back(from);
  }
  for(int i=0;i<n;i++)init(i);

  solve();
  return 0;
}