Example

Input

3 3 1 2 4
1 2
2 3
3 1


Output

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

const int INF = 1e9;

signed main(){
	int n,m,a[3];
	vector<int> G[55];
	cin >> n >> m;
	for(int i = 0;i < 3;i++) cin >> a[i];
	bool canReach[55][110][55] = {};
	for(int i = 0;i < m;i++){
		int u,v;
		cin >> u >> v; u--;v--;
		G[u].push_back(v);
		canReach[u][1][v] = true;
	}
	for(int i = 2;i <= 100;i++){
		for(int j = 0;j < n;j++){
			for(int to : G[j]){
				for(int k = 0;k < n;k++) canReach[j][i][k] |= canReach[to][i - 1][k];
			}
		}
	}
	int dist[55];
	for(int i = 0;i < n;i++) dist[i] = INF;
	dist[n - 1] = 0;
	for(int i = 0;i < n;i++){
		for(int j = 0;j < n;j++){
			int ds[3] = {INF,INF,INF};
			for(int k = 0;k < 3;k++){
				for(int l = 0;l < n;l++){
					if(canReach[j][a[k]][l]) ds[k] = min(ds[k],dist[l] + 1);
				}
			}
			dist[j] = min(dist[j],max({ds[0],ds[1],ds[2]}));
		}
	}
	if(dist[0] == INF) cout << "IMPOSSIBLE" << endl;
	else cout << dist[0] << endl;
}
