import core.bitop, std.bitmanip;
import core.checkedint;
import std.algorithm, std.functional;
import std.array, std.container;
import std.bigint;
import std.conv;
import std.math, std.numeric;
import std.range, std.range.interfaces;
import std.stdio, std.string;
import std.typecons;

void main() {
    int a, b, x;
    readf("%s %s %s", &a, &b, &x);
    readln;
   
    int tot = a*a * b;
    
    double p = hypot(a, b);
    double midangle = asin(b / p) * 180 / PI;
    
    debug { writeln(p, ' ', midangle); }
    
    bool isOk(double angle) {
        double field(double b, double angle) {
            double rad = angle * PI / 180;
            double a = tan(rad) * b;
            
            return a * b / 2;
        }
        
        double lft = 0;
        if (angle < midangle) {
            double sz = field(a, angle);
            lft = tot - sz * a;
        } else {
            double sz = field(b, 90 - angle);
            lft = sz * a;
        }
        
        return lft >= x;
    }
    
    double le = 0, r = 90;
    foreach (_; 0 .. 100) {
        double m = (le + r) / 2;
        if (isOk(m)) { le = m; }
        else { r = m; }
    }
    
    writefln!"%.10f"(le);
}