#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <stack>
#include <bitset>
#define INF 0x3f3f3f3f
#define eps 1e-8
#define FI first
#define SE second
using namespace std;
typedef long long LL;
const double pi=acos(-1.0);
int W,H;

inline bool in(double x,double y,double r)
{
    return x-r>=-1e-4&&x+r<=W+1e-4&&y-r>=-1e-4&&y+r<=H+1e-4;
}

inline double area(double r1, double r2,double s)
{
	if(r1 + r2 < s)
		return 0;
	else if(r2 - r1 > s)
		return pi * r1 * r1;
	else if(r1 - r2 > s)
		return pi * r2 * r2;
	double q1 = acos((r1 * r1 + s * s - r2 * r2) / (2 * r1 * s));
	double q2 = acos((r2 * r2 + s * s - r1 * r1) / (2 * r2 * s));
	return (r1 * r1 * q1 + r2 * r2 * q2 - r1 * s * sin(q1));
}

inline double sqr(double x) {return x*x;}
int main()
{
    int A,B,AB;
    while(scanf("%d%d%d%d%d",&W,&H,&A,&B,&AB)&&W)
    {
        int fg=0;
        if(A<B) swap(A,B),fg=1;
        double R=sqrt(A/pi);
        double r=sqrt(B/pi);
        double xa=R,ya=R;
        if(!in(xa,ya,R)) {puts("impossible");continue;}
        double d;
        if(!AB) d=R+r;
        else if(AB==B) d=0;
        else
        {
            double ll=R-r,rr=R+r,mid;
            for(int i=0;i<200;++i)
            {
                mid=(ll+rr)/2;
                if(area(R,r,mid)<=AB) rr=mid;
                else ll=mid;
            }
            d=rr;
        }
        double tx=W-r,ty=H-r;
        double dis=sqrt(sqr(tx-xa)+sqr(ty-ya));
        double xb=xa+(tx-xa)*d/dis;
        double yb=ya+(ty-ya)*d/dis;
        if(in(xb,yb,r))
        {
            if(fg)
            {
                swap(xa,xb);
                swap(ya,yb);
                swap(R,r);
            }
            printf("%.10f %.10f %.10f %.10f %.10f %.10f\n",xa,ya,R,xb,yb,r);
        }
        else puts("impossible");
    }
    return 0;
}