import java.util.*;
import java.io.*;

public class ellipse_akov_tern {
	FastScanner in;
	PrintWriter out;

	final int COUNT_ITERATIONS = 1000;
	final double R = 0.5;
	
	Point center;
	Matrix transform;
	
	class Point {
		double x, y;

		public Point(double x, double y) {
			super();
			this.x = x;
			this.y = y;
		}
		
		public double dist(Point p) {
			return Math.sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
		}

		@Override
		public String toString() {
			return x + " " + y;
		}
	}
	
	class Matrix {
		double[][] m;

		public Matrix(double a, double b, double c, double d) {
			m = new double[2][2];
			m[0][0] = a;
			m[0][1]  = b;
			m[1][0] = c;
			m[1][1] = d;
		}
		
		public Point multiply(Point p) {
			return new Point(m[0][0] * p.x + m[0][1] * p.y, m[1][0] * p.x + m[1][1] * p.y);
		}
	}
	
	double f(double phi) {
		Point p = new Point(R + R * Math.cos(phi), R + R * Math.sin(phi));
		return center.dist(transform.multiply(p));
	}
	
	public void solve() throws IOException {
		double a = in.nextDouble(), b = in.nextDouble(), alpha = in.nextDouble() * Math.PI / 180;
		transform = new Matrix(a, b * Math.cos(alpha), 0, b * Math.sin(alpha));
		center = transform.multiply(new Point(R, R));
		
		double maxOs = 0, minOs = 1e18;
		
		double l = 0, r = Math.PI / 2;
		for (int it = 0; it < COUNT_ITERATIONS; it++) {
			double phi1 = (2 * l + r) / 3;
			double phi2 = (l + 2 * r) / 3;
			if (f(phi1) > f(phi2)) {
				r = phi2;
			} else {
				l = phi1;
			}
		}
		maxOs = f(l);
		
		l = Math.PI / 2; r = Math.PI;
		for (int it = 0; it < COUNT_ITERATIONS; it++) {
			double phi1 = (2 * l + r) / 3;
			double phi2 = (l + 2 * r) / 3;
			if (f(phi1) > f(phi2)) {
				l = phi1;
			} else {
				r = phi2;
			}
		}
		minOs = f(l);
		
		
		out.println(maxOs + " " + minOs);
		assert(Math.abs(maxOs * minOs * 4 - a * b * Math.sin(alpha)) < 1e-9);
	}

	public void run() {
		try {
			in = new FastScanner(new File("ellipse.in"));
			out = new PrintWriter(new File("ellipse.out"));

			solve();

			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	class FastScanner {
		BufferedReader br;
		StringTokenizer st;

		FastScanner(File f) {
			try {
				br = new BufferedReader(new FileReader(f));
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
		}

		String next() {
			while (st == null || !st.hasMoreTokens()) {
				try {
					st = new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			return st.nextToken();
		}

		int nextInt() {
			return Integer.parseInt(next());
		}

		long nextLong() {
			return Long.parseLong(next());
		}

		double nextDouble() {
			return Double.parseDouble(next());
		}

	}

	public static void main(String[] arg) {
		new ellipse_akov_tern().run();
	}
}