#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
  point(double xx = 0, double yy = 0) : x(xx), y(yy) {}
  point operator+(const point &B) const { return point(x + B.x, y + B.y); }
  point operator-(const point &B) const { return point(x - B.x, y - B.y); }
  point operator*(const double &B) const { return point(x * B, y * B); }
  point operator/(const double &B) const { return point(x / B, y / B); }
  point rotate() { return point(-1 * y, x); }
  double len() { return sqrt(x * x + y * y); }
};
int main() {
  point P, V;
  double a, b, c, d;
  cin >> P.x >> P.y >> V.x >> V.y >> a >> b >> c >> d;
  point O = V;
  point Orot = O.rotate();
  point meg[8];
  meg[1] = ((O / O.len()) * b) + P;
  meg[2] = ((Orot / O.len()) * (a / 2)) + P;
  meg[3] = ((Orot / O.len()) * (c / 2)) + P;
  meg[4] = (((O / O.len()) * ((-1 * d)) + (Orot / O.len()) * (c / 2))) + P;
  meg[5] =
      (((O / O.len()) * ((-1 * d)) + (Orot / O.len()) * (-1 * (c / 2)))) + P;
  meg[6] = ((Orot / O.len()) * (-1 * (c / 2))) + P;
  meg[7] = ((Orot / O.len()) * (-1 * (a / 2))) + P;
  printf("%.12f %.12f\n", meg[1].x, meg[1].y);
  printf("%.12f %.12f\n", meg[2].x, meg[2].y);
  printf("%.12f %.12f\n", meg[3].x, meg[3].y);
  printf("%.12f %.12f\n", meg[4].x, meg[4].y);
  printf("%.12f %.12f\n", meg[5].x, meg[5].y);
  printf("%.12f %.12f\n", meg[6].x, meg[6].y);
  printf("%.12f %.12f\n", meg[7].x, meg[7].y);
}
