//#pragma GCC optimize ("O3", "unroll-loops")
//#pragma GCC target ("avx2")
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <bits/stdc++.h>
#define LL long long
#define PII pair<int, int>
#define PLL pair<LL, LL>
#define all_of(v) (v).begin(), (v).end()
#define sort_unique(c) (sort(c.begin(),c.end()), c.resize(distance(c.begin(),unique(c.begin(),c.end()))))
#define fi first
#define se second
//const int MAXN = 300005;
//const LL INF = (LL) 1e9 + 8763;
const LL MOD = (LL) 1e9 + 7;
using namespace std;
template <class T> using minheap = priority_queue<T, vector<T>, greater<T>>;
template <class T> using maxheap = priority_queue<T, vector<T>, less<T>>;
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
// function<vector<int>(int, int, int)> func = [&] (int m, int l, int c) {};

LL qpow(LL a, LL pw, LL mod) {
	LL res = 1;
	a %= mod;
	while (pw) {
		if (pw & 1) res = res * a % mod;
		a = a * a % mod;
		pw >>= 1;
	}
	return res;
}
LL mod_inv(LL a, LL mod) {
	// for prime
	a %= mod;
	return qpow(a, mod - 2, mod);
}

/* fac, C, H */
const int LIM = 2000005; // Double for H(n, k)
LL fac[LIM], finv[LIM];
void init_fac(LL mod) {
	fac[0] = finv[0] = 1;
	for (int i = 1; i < LIM; i++) {
		fac[i] = fac[i - 1] * i % mod;
		finv[i] = qpow(fac[i], mod - 2, mod);
	}
}
LL C(LL n, LL k, LL mod) {
	assert(n < mod && k < mod); // otherwise, use Lucas
	if (k > n || n < 0 || k < 0) return 0;
	return fac[n] * finv[k] % mod * finv[n - k] % mod;
}

void solve() {
	init_fac(MOD);
	LL n, m, k;
	cin >> n >> m >> k;
	if (n - m > k) {
		cout << "0\n";
		return;
	}
	cout << (C(n + m, n, MOD) - C(n + m, m + k + 1, MOD) + MOD) % MOD << '\n';
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);

	int tc = 1;
//	cin >> tc;
	for (int i = 1; i <= tc; i++) {
		solve();
	}

	return 0;
}
#include <bits/stdc++.h>
using namespace std;
 
#define all(a) (a).begin(), (a).end()
#define int long long
 
int32_t main() {
    cin.tie(0); ios_base::sync_with_stdio(false);

    int dp[31][31];
    dp[0][0] = 1;
    for (int i = 0; i <= 30; ++i) {
        for (int j = 0; j <= 30; ++j) {
            if (i + j == 0) continue;
            dp[i][j] = 0;
            if (i - 1 >= 0) dp[i][j] += dp[i - 1][j];
            if (j - 1 >= 0) dp[i][j] += dp[i][j - 1];
        }
    }

    int a, b, k;
    cin >> a >> b >> k;

    while (a + b) {
        if (a >= 1 && dp[a - 1][b] >= k) cout << 'a', a--;
        else {
            assert(b);
            cout << 'b';
            if (a) k -= dp[a - 1][b];
            b--;
        }
    }
}
