Example

Input

3 3 1 2 4
1 2
2 3
3 1


Output

IMPOSSIBLE
#include <algorithm>
#include <iostream>
#include <set>
#include <string>
#include <vector>


using namespace std;

typedef long long ll;
typedef long double ld;

ll enable[50][50][400];
int G[50][50];
int dp[50][150];
int n,a[3];


int dfs(int u,int t){
  if(t==150)return 1000000000;
  if(dp[u][t]>=0){
    return dp[u][t];
  }
  if(u==n-1)
    return dp[u][t]=0;

  int ret=0;
  for(int k=0;k<3;k++){
    int res=1000000000;
    for(int i=0;i<n;i++){
      if(i==u)continue;
      if(enable[u][i][a[k]]>0){
          res=min(res,dfs(i,t+1)+1);
      }
    }
    //cout<<u<<" "<<t<<" "<<k<<endl;
    ret=max(res,ret);
  }
  return dp[u][t]=ret;
}

int main(){
  int m;
  cin>>n>>m>>a[0]>>a[1]>>a[2];
  for(int i=0;i<m;i++){
    int u,v;cin>>u>>v;u--;v--;
    G[u][v]=1;
  }
  for(int i=0;i<n;i++){
    enable[i][i][0]=1;
  }
  for(int i=0;i<399;i++){
    for(int j=0;j<n;j++){
      for(int k=0;k<n;k++){
        for(int t=0;t<n;t++){
          if(enable[j][k][i]&&G[k][t])
            enable[j][t][i+1]=1;
        }
      }
    }
  }
  for(int i=0;i<n;i++)for(int j=0;j<150;j++)dp[i][j]=-1;
  int ans=dfs(0,0);
  if(ans>=1000000000)cout<<"IMPOSSIBLE"<<endl;
  else cout<<ans<<endl;
}
