import std.algorithm;
import std.array;
import std.container;
import std.conv;
import std.math;
import std.numeric;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

void scan(T...)(ref T a) {
    string[] ss = readln.split;
    foreach (i, t; T) a[i] = ss[i].to!t;
}
T read(T)() { return readln.chomp.to!T; }
T[] reads(T)() { return readln.split.to!(T[]); }
alias readint = read!int;
alias readints = reads!int;

double degrees(double rad) {
    return 180 * rad / PI;
}

double calc(double a, double b, double x) {
    // 水が半分以上かどうかで場合分け
    double theta;
    if (x >= a * a * b / 2) {
        theta = atan(2 * (a * a * b - x) / (a * a * a));
    }
    else {
        theta = atan((a * b * b) / (2 * x));
    }
    return degrees(theta);
}

void main() {
    int a, b, x; scan(a, b, x);
    writefln("%.8f", calc(a, b, x));
}
