#54235: 會就別看


kita197 (aries)


#include <stdio.h>

typedef long long ll;
const ll MOD = 100000007;

void multiply(ll A[2][2], ll B[2][2], ll C[2][2]) {
    ll T[2][2] = {0};
    for (int i = 0; i < 2; i++) {
        for (int k = 0; k < 2; k++) {
            if (A[i][k] == 0) continue;
            for (int j = 0; j < 2; j++) {
                T[i][j] = (T[i][j] + A[i][k] * B[k][j]) % MOD;
            }
        }
    }
    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 2; j++)
            C[i][j] = T[i][j];
}

void power(ll A[2][2], int n) {
    ll res[2][2] = {{1, 0}, {0, 1}};
    while (n > 0) {
        if (n & 1) multiply(res, A, res);
        multiply(A, A, A);
        n >>= 1;
    }
    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 2; j++)
            A[i][j] = res[i][j];
}

int main() {
    ll m, f, k;
    while (scanf("%lld %lld %lld", &m, &f, &k) != EOF) {
        if (k == 0) {
            printf("%lld\n", (m + f) % MOD);
            continue;
        }

        ll T[2][2] = {{0, 1}, {1, 1}};
        
        power(T, k);

        // M_k = T[0][0]*m + T[0][1]*f
        // F_k = T[1][0]*m + T[1][1]*f
        ll final_m = (T[0][0] * m + T[0][1] * f) % MOD;
        ll final_f = (T[1][0] * m + T[1][1] * f) % MOD;

        printf("%lld\n", (final_m + final_f) % MOD);
    }
    return 0;
}