Problem:
A 君は山手線に乗って目的地にたどり着きたい．

A 君は電車に乗ってから a 分起きて b 分寝ることを繰り返す．目的地までは乗車後 c 分であり，このとき起きていれば下車できるが，逆に寝ている途中であれば乗り過ごしてしまう．また，A 君は乗り過ごしてもずっと同じ電車に乗り続け，電車は山手線を一周するのに 60 分かかる．したがって，A 君は目的地に 60t + c ( t は非負整数) 分後に着くことになる．

何分後にA 君は目的地に到着できるか．到着不可能なときは-1 を出力せよ．ただし，目的地に到着した時が寝ている時間と起きている時間の境目だった場合は降りることができるものとする．

Input

入力は以下の形式で1 行で与えられる．

a b c

入力は3 つの整数 a, b, c からなる．

a は起きている時間，b は寝ている時間，c は乗車してから目的地までにかかる時間である．また，a, b, c の単位は分である．

Constraints

0 < a, b, c < 60

Output

A 君が目的地に到着できる場合はA 君の目的地到着までにかかる時間を出力せよ．それ以外の場合は-1 を出力せよ．

Sample Input 1

10 10 5

Output for the Sample Input 1

5

寝る前に目的地にたどり着く．

Sample Input 2

50 40 51

Output for the Sample Input 2

111

一回乗り過ごしてしまう．

Sample Input 3

20 20 20

Output for the Sample Input 3

20

もうちょっとで寝るところだったがなんとか目的地で起きていられた．

Sample Input 4

30 30 40

Output for the Sample Input 4

-1

一周の前半では起きているが後半で寝ているということを繰り返す．

このため目的地にはたどり着けない．

Solution in C# (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;

public class Pg
{
    static void Main()
    {
        var rd = new Reader();
        var ct = new Counter();
        Console.WriteLine(ct.GetMin(rd.ReadInts().ToList()));

    }
}
class Counter
{
    const int ROUND = 60;
    int t;
    internal int GetMin(List<int> lst, params int[] n)
    {
        try
        {
            t = n[0];
        }
        catch
        {
            t = 0;
        }
        int p = t + lst[0];
        while (lst[2] < t)
        {
            lst[2] += ROUND;
        }
        if (t <= lst[2] && lst[2] <= p)
            return lst[2];
        t = p + lst[1];
        if (t % ROUND == 0)
            return -1;
        else
            return GetMin(lst, t);
    }
}
class Reader
{
    internal IEnumerable<string> Read()
    {
        int n = int.Parse(Console.ReadLine());
        while (n-- > 0)
        {
            yield return Console.ReadLine();
        }
    }
    internal IEnumerable<int> ReadInts()
    {
        return Console.ReadLine().Split().Select(int.Parse);
    }
}