#include using namespace std; #ifdef _RUTHEN #include #else #define show(...) true #endif using ll = long long; #define rep(i, n) for (int i = 0; i < (n); i++) template using V = vector; int main() { ios::sync_with_stdio(false); cin.tie(0); int N, M, K; cin >> N >> M >> K; K++; V ans; { // start 0 int c0 = (K + 1) / 2, c1 = K / 2; if (c0 <= N and c1 <= M) { V> B; int t = 0; while (B.size() < K) { if (t == 1) { B.push_back({1, 1}); M--; } else { B.push_back({0, 1}); N--; } t ^= 1; } assert(B.size() == K); rep(i, K) { { auto &[c, cnt] = B[i]; if (c == 0) { cnt += N; N = 0; } } { auto &[c, cnt] = B[K - 1 - i]; if (c == 1) { cnt += M; M = 0; } } } string s; for (auto &[c, cnt] : B) s += string(cnt, c + '0'); ans.push_back(s); } } { // start 1 int c1 = (K + 1) / 2, c0 = K / 2; if (c0 <= N and c1 <= M) { V> B; int t = 1; while (B.size() < K) { if (t == 1) { B.push_back({1, 1}); M--; } else { B.push_back({0, 1}); N--; } t ^= 1; } assert(B.size() == K); rep(i, K) { { auto &[c, cnt] = B[i]; if (c == 0) { cnt += N; N = 0; } } { auto &[c, cnt] = B[K - 1 - i]; if (c == 1) { cnt += M; M = 0; } } } string s; for (auto &[c, cnt] : B) s += string(cnt, c + '0'); ans.push_back(s); } } sort(ans.begin(), ans.end()); if (ans.size() == 0) { cout << -1 << '\n'; } else { cout << ans[0] << '\n'; } return 0; }