#include <bits/stdc++.h>
using namespace std;
int a, b, c, numa, numb, numc;
long long ans;
int query(int x){
int res = 0;
while (x){
if (x & 1) ++res;
x >>= 1;
}
return res;
}
int main(){
scanf("%d%d%d", &a, &b, &c);
int aa = a, bb = b, cc = c;
while (a){
if (a & 1) ++numa;
a >>= 1;
}
while (b){
if (b & 1) ++numb;
b >>= 1;
}
while (c){
if (c & 1) ++numc;
c >>= 1;
}
int nummm = max(numa, max(numb, numc));
if (!numa && !numb && !numc){
puts("0");
return 0;
}
if (numc == 1){
ans = 1ll * 1 << (numa + numb - 1);
printf("%lld", query(ans) > nummm ? -1 : ans);
return 0;
}
if (numa < numb) swap(numa, numb);
if (numc > 1 && numb >= numc){
ans += 1 << (numb + numa - numc);
int num = 1;
for (int i = 1; i < numc; i++) ans += 1 << num, ++num;
printf("%lld", query(ans) > nummm ? -1 : ans);
return 0;
}
if (numc > numb && numc <= numa){
int num = 0;
for (int i = 1; i <= numc - numb; i++) ans += 1 << num, ++num;
for (int i = numc - numb + 1; i < numc; i++)
ans += 1 << (++num);
ans += 1 << numa;
printf("%lld", query(ans) > nummm ? -1 : ans);
return 0;
}
if (numc < numa + numb && numc > numa){
int num = 0;
for (int i = 1; i <= numc - numa; i++){
ans += 1 << num, ++num;
}
for (int i = 1; i <= numa - (numb - numc + numa); i++) ans += 1 << num, ++num;
for (int i = 2 * numc - numa - numb + 1; i < numc; i++) ans += 1 << (++num);
ans += 1 << numc;
printf("%lld", query(ans) > nummm ? -1 : ans);
return 0;
}
if (numc == numa + numb)
{
ans = aa + bb;
printf("%lld", query(ans) > nummm ? -1 : ans);
return 0;
}
puts("-1");
return 0;
}