#include <iostream>
#include <map>
#include <queue>
#include <cstdio>
#define MAX 1000000000
using namespace std;




map <int,int> list;
map <int,int> ::iterator it;
int m1[3][3];
int m2[3][3];
int B,R,G,Y,W;

int gao(int x)
{
	int y,ans=0;
	while(x)
	{
		
		y=x%10;
		x/=10;
		if(y==1)
			ans+=B;
		if(y==2)
			ans+=R;
		if(y==3)
			ans+=G;
		if(y==4)
			ans+=Y;
	}

	return ans;
}

struct node
{
	int s;
	int step;
};

int main()
{
	int i,j,k,x,y,cases,ans,num;
	int f[3][3]={100000000,10000000,1000000,100000,10000,1000,100,10,1};
	int d[4][2]={-1,0,1,0,0,-1,0,1};
	bool mark[5];
	cases=1;
	node ss,tt;

	list.clear();
	list.insert(make_pair(0,0));
	ss.s=0;
	ss.step=0;
	queue <node> q;
	q.push(ss);
	while(!q.empty())
	{
		ss=q.front();
		q.pop();
		//cout<<ss.s<<" "<<ss.step<<endl;
		int tmp=ss.s;
		int cc=8;
		while(cc>=0)
		{
			if(tmp==0)
				m1[cc/3][cc%3]=0;
			else
			{
				m1[cc/3][cc%3]=tmp%10;
				tmp/=10;
			}
			cc--;
		}

		for(i=0;i<3;i++)
			for(j=0;j<3;j++)
			{
				if(i==0&&j==0)
				{
					if(m1[i][j]==1)
						continue;
					tt.step=ss.step+1;
					tt.s=ss.s+100000000;
					it=list.find(tt.s);
						if(it==list.end())
						{
							list.insert(make_pair(tt.s,tt.step));
							q.push(tt);
						}
						continue;
				}
			
					for(k=1;k<=4;k++)
						mark[k]=false;
					for(k=0;k<4;k++)
					{
						x=i+d[k][0];
						y=j+d[k][1];
						if(x<0||x==3||y<0||y==3)
							continue;
						mark[m1[x][y]]=true;
					}

					num=0;
					for(k=1;k<4;k++)
					{
						if(mark[k])
							num++;
						else break;
					}

					for(k=num+1;k>=1;k--)
					{
						tt.step=ss.step+1;
						tt.s=ss.s;
						tt.s-=(ss.s%(f[i][j]*10))/f[i][j]*f[i][j];
						tt.s+=k*f[i][j];
						it=list.find(tt.s);
						if(it==list.end())
						{
							list.insert(make_pair(tt.s,tt.step));
							q.push(tt);
						}
				
					}

			}


	}


	cout<<list.size()<<endl;
	while(cin>>B&&B)
	{
		cin>>R>>G>>Y>>W;
		printf("Case %d: ",cases++);
	

		ans=MAX;

		for(it=list.begin();it!=list.end();it++)
		{
			if(gao(it->first)<W)
				continue;
			ans=min(ans,it->second);
		}

	

		if(ans==MAX)
			cout<<"Impossible"<<endl;
		else cout<<ans<<endl;


	}
}
