# import sys

#

# sys.setrecursionlimit(10 ** 7)

#

# input = sys.stdin.readline

# rstrip()



# int(input())

# map(int, input().split())



from math import atan, degrees



a, b, x = list(map(int, input().split()))



# 三角柱

w = x * 2 / (a * b)

if 0 <= w <= a:

    print((degrees(atan(b / w))))

    exit()



# 台形柱

h = x * 2 / (a ** 2) - b

print((degrees(atan((b - h) / a))))

# https://img.atcoder.jp/abc144/editorial.pdf



def main():

    from math import pi, tan, radians



    a, b, x = list(map(int, input().split()))



    def volume(theta: float):

        """傾けた直方体に存在できる水の体積

        水面を地面に対し平行にした図を描き

        tanを用いると計算できる"""

        theta = radians(theta)

        if a * tan(theta) <= b:  # 台形

            return a * a * b - a * a * a * tan(theta) / 2

        else:  # 三角形

            return a * b * b * tan(pi / 2 - theta) / 2



    def is_ok(theta):

        return volume(theta) >= x



    def binary_search():

        small, large = 0, 90

        for _ in range(30):

            mid = (small + large) / 2

            if is_ok(mid):

                small = mid

            else:

                large = mid

        return small



    ret = binary_search()

    print(ret)





if __name__ == '__main__':

    main()

# import sys
#
# sys.setrecursionlimit(10 ** 7)
#
# input = sys.stdin.readline
# rstrip()
# int(input())
# map(int, input().split())
from math import atan, degrees

a, b, x = list(map(int, input().split()))
# 三角柱
w = x * 2 / (a * b)
if 0 <= w <= a:
    print((degrees(atan(b / w))))
    exit()
# 台形柱
h = x * 2 / (a**2) - b
print((degrees(atan((b - h) / a))))

# https://img.atcoder.jp/abc144/editorial.pdf
def main():
    from math import pi, tan, radians

    a, b, x = list(map(int, input().split()))

    def volume(theta: float):
        """傾けた直方体に存在できる水の体積
        水面を地面に対し平行にした図を描き
        tanを用いると計算できる"""
        theta = radians(theta)
        if a * tan(theta) <= b:  # 台形
            return a * a * b - a * a * a * tan(theta) / 2
        else:  # 三角形
            return a * b * b * tan(pi / 2 - theta) / 2

    def is_ok(theta):
        return volume(theta) >= x

    def binary_search():
        small, large = 0, 90
        for _ in range(30):
            mid = (small + large) / 2
            if is_ok(mid):
                small = mid
            else:
                large = mid
        return small

    ret = binary_search()
    print(ret)


if __name__ == "__main__":
    main()

-# import sys -# -# sys.setrecursionlimit(10 ** 7) -# -# input = sys.stdin.readline -# rstrip() -# int(input()) -# map(int, input().split()) -from math import atan, degrees +# https://img.atcoder.jp/abc144/editorial.pdf +def main(): +    from math import pi, tan, radians -a, b, x = list(map(int, input().split())) -# 三角柱 -w = x * 2 / (a * b) -if 0 <= w <= a: -    print((degrees(atan(b / w)))) -    exit() -# 台形柱 -h = x * 2 / (a**2) - b -print((degrees(atan((b - h) / a)))) +    a, b, x = list(map(int, input().split())) + +    def volume(theta: float): +        """傾けた直方体に存在できる水の体積 +        水面を地面に対し平行にした図を描き +        tanを用いると計算できる""" +        theta = radians(theta) +        if a * tan(theta) <= b:  # 台形 +            return a * a * b - a * a * a * tan(theta) / 2 +        else:  # 三角形 +            return a * b * b * tan(pi / 2 - theta) / 2 + +    def is_ok(theta): +        return volume(theta) >= x + +    def binary_search(): +        small, large = 0, 90 +        for _ in range(30): +            mid = (small + large) / 2 +            if is_ok(mid): +                small = mid +            else: +                large = mid +        return small + +    ret = binary_search() +    print(ret) + + +if __name__ == "__main__": +    main()