/*
TASK:minjumps
LANG:C++
*/
#include<cstdio>
#include<queue>
using namespace std;

const int INF=2000000000;
int a, b, n;

int nod(int a, int b)
{
    int t;
    while(a)
    {
        if(a<b)
        {
            t=a;
            a=b;
            b=t;
        }
        a%=b;
    }
    return b;
}

int dst[100000];
/*
#define dist(a) dst[a]

int find(int place)
{
    if(place<0)place=-place;
    if(place>n) return INF;
    if(place==n) return 0;
    if(dist(place)) return dist(place);
    int s=INF, p=find(place-a), q=find(place-b);
    if(p<s)s=p;
    if(q<s)s=q;
    return s+1;
}
*/
    
int main()
{
    scanf("%d%d%d", &a, &b, &n);
    if(n<0)n=-n;
    if(a>b)
    {
        int t;
        t=a;
        a=b;
        b=t;
    }
    int br=0;
    int nd=nod(a,b);
    if(n%nd!=0)
    {
        printf("-1\n");
        return 0;
    }
    int nodd=1+b/a;
    if(b%a)nodd++;
    br+=n/a;
    n%=a;
    br+=n/b;
    n%=b;
    br+=nodd*(n/nd);
    printf("%d\n", br);
    return 0;
}
