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 JAVA (judge verdict: Accepted)

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;

public class Main{

	static PrintWriter out;
	static InputReader ir;

	static void solve(){
		int[] a=ir.nextIntArray(3);
		boolean[] f=new boolean[a[0]+a[1]];
		for(int i=a[2];;i+=60){
			int r=i%(a[0]+a[1]);
			if(f[r]){
				out.println(-1);
				break;
			}
			if(r<=a[0]){
				out.println(i);
				break;
			}
			f[r]=true;
		}
	}

	public static void main(String[] args) throws Exception{
		ir=new InputReader(System.in);
		out=new PrintWriter(System.out);
		solve();
		out.flush();
	}

	static class InputReader {

		private InputStream in;
		private byte[] buffer=new byte[1024];
		private int curbuf;
		private int lenbuf;

		public InputReader(InputStream in) {this.in=in; this.curbuf=this.lenbuf=0;}

		public boolean hasNextByte() {
			if(curbuf>=lenbuf){
				curbuf= 0;
				try{
					lenbuf=in.read(buffer);
				}catch(IOException e) {
					throw new InputMismatchException();
				}
				if(lenbuf<=0) return false;
			}
			return true;
		}

		private int readByte(){if(hasNextByte()) return buffer[curbuf++]; else return -1;}

		private boolean isSpaceChar(int c){return !(c>=33&&c<=126);}

		private void skip(){while(hasNextByte()&&isSpaceChar(buffer[curbuf])) curbuf++;}

		public boolean hasNext(){skip(); return hasNextByte();}

		public String next(){
			if(!hasNext()) throw new NoSuchElementException();
			StringBuilder sb=new StringBuilder();
			int b=readByte();
			while(!isSpaceChar(b)){
				sb.appendCodePoint(b);
				b=readByte();
			}
			return sb.toString();
		}

		public int nextInt() {
			if(!hasNext()) throw new NoSuchElementException();
			int c=readByte();
			while (isSpaceChar(c)) c=readByte();
			boolean minus=false;
			if (c=='-') {
				minus=true;
				c=readByte();
			}
			int res=0;
			do{
				if(c<'0'||c>'9') throw new InputMismatchException();
				res=res*10+c-'0';
				c=readByte();
			}while(!isSpaceChar(c));
			return (minus)?-res:res;
		}

		public long nextLong() {
			if(!hasNext()) throw new NoSuchElementException();
			int c=readByte();
			while (isSpaceChar(c)) c=readByte();
			boolean minus=false;
			if (c=='-') {
				minus=true;
				c=readByte();
			}
			long res = 0;
			do{
				if(c<'0'||c>'9') throw new InputMismatchException();
				res=res*10+c-'0';
				c=readByte();
			}while(!isSpaceChar(c));
			return (minus)?-res:res;
		}

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

		public int[] nextIntArray(int n){
			int[] a=new int[n];
			for(int i=0;i<n;i++) a[i]=nextInt();
			return a;
		}

		public long[] nextLongArray(int n){
			long[] a=new long[n];
			for(int i=0;i<n;i++) a[i]=nextLong();
			return a;
		}

		public char[][] nextCharMap(int n,int m){
			char[][] map=new char[n][m];
			for(int i=0;i<n;i++) map[i]=next().toCharArray();
			return map;
		}
	}
}