Example

Input

3 3 1 2 4
1 2
2 3
3 1


Output

IMPOSSIBLE
#include<bits/stdc++.h>
#define INF (1e9)
#define M 105
#define N 55
using namespace std;
typedef pair<int,int> P;
typedef pair<int,P> P1;

vector<int> G[N];
int n,m,declare[3];
int used[3][N][M],used2[N];
queue<P1> q;

void bfs(){
  while(!q.empty()){
    P1 t=q.front(); q.pop();
    int idx=t.first;
    int node=t.second.first;
    int cnt=t.second.second;
    if(used[idx][node][cnt])continue;
    used[idx][node][cnt]=1;
    if(!cnt)continue;
    
    for(int i=0;i<G[node].size();i++)
      q.push(P1(idx,P(G[node][i],cnt-1)));
  }
}

int main(){
  cin>>n>>m;
  for(int i=0;i<3;i++)cin>>declare[i];

  int u,v;
  for(int i=0;i<m;i++){
    cin>>u>>v;
    u--,v--;
    G[v].push_back(u);
  }
  
  for(int i=0;i<3;i++)used[i][n-1][0]=1;
  
  int turn=1,ans=INF;
  while(1){
    for(int i=0;i<n;i++){
      if(used2[i])continue;
      int f=0;
      for(int j=0;j<3;j++)
	if(!used[j][i][0])f=1;
      if(!f){
	used2[i]=1;
	for(int j=0;j<3;j++)
	  q.push(P1(j,P(i,declare[j])));
      }
    }
    if(q.empty())break;
    bfs();
    int f=0;
    for(int i=0;i<3;i++)
      if(!used[i][0][0])f=1;
    if(!f){
      ans=turn;
      break;
    }
    turn++;
  }
  
  if(ans==INF)cout<<"IMPOSSIBLE"<<endl;
  else cout<<ans<<endl;
  
  return 0;
}