Problem: You are given three integers a, b, k.

Find two binary integers x and y (x ≥ y) such that 

  1. both x and y consist of a zeroes and b ones; 
  2. x - y (also written in binary form) has exactly k ones. 

You are not allowed to use leading zeros for x and y. 

Input

The only line contains three integers a, b, and k (0 ≤ a; 1 ≤ b; 0 ≤ k ≤ a + b ≤ 2 ⋅ 10^5) — the number of zeroes, ones, and the number of ones in the result.

Output

If it's possible to find two suitable integers, print "Yes" followed by x and y in base-2.

Otherwise print "No".

If there are multiple possible answers, print any of them.

Examples

Input


4 2 3


Output


Yes
101000
100001


Input


3 2 1


Output


Yes
10100
10010


Input


3 2 5


Output


No

Note

In the first example, x = 101000_2 = 2^5 + 2^3 = 40_{10}, y = 100001_2 = 2^5 + 2^0 = 33_{10}, 40_{10} - 33_{10} = 7_{10} = 2^2 + 2^1 + 2^0 = 111_{2}. Hence x-y has 3 ones in base-2.

In the second example, x = 10100_2 = 2^4 + 2^2 = 20_{10}, y = 10010_2 = 2^4 + 2^1 = 18, x - y = 20 - 18 = 2_{10} = 10_{2}. This is precisely one 1.

In the third example, one may show, that it's impossible to find an answer.

Solution (in CPP):

Solution:
#include <iostream>
#include<bits/stdc++.h>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <chrono> 
#include<time.h>
#include <sys/time.h>
#include <unistd.h>
#include <algorithm> 
#include <fstream> 
#define pi 3.14159265
#define ss second
#define ff first
#define pb push_back
#define endl '\n'
// #include <typeinfo>
// #include<String>
bool time_seed = 0;



using namespace std;
using namespace std::chrono;

// ifstream cin;
// cin.open("input.txt");

typedef long long int ll;
typedef vector<int> vi; 
typedef vector<vi> vvi;
typedef vector<vvi> vvvi;
typedef vector<double> vd; 
typedef vector<vd> vvd;
typedef vector<vvd> vvvd;
typedef vector<bool> vb; 
typedef vector<vb> vvb;
typedef vector<char> vc;
typedef vector<vc> vvc;
typedef vector<string> vs;
typedef vector<vs> vvs;
typedef vector<vvs> vvvs;
typedef vector<ll> vll; 
typedef vector<vll> vvll;
typedef pair<int,int> pii;
// typedef unordered_map ump;
// typedef unordered_map ump;
// #define unordered_map ump
// auto start = high_resolution_clock::now();
//     for(int i = 0;i<k;i++) s.lower_bound(i);
//     auto stop = high_resolution_clock::now(); 
//     auto duration = duration_cast<microseconds>(stop - start);
//     cout << "Time taken by function: "
//          << duration.count() << " microseconds" << endl; 
#define mod 1000000007
// #define mod 998244353
// #define unordered_map ump


struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};  
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};


void show_vi(vector<int> t){
    // //cout<<"show_vi"<<endl;
    for(int i = 0;i<t.size();i++){
        cout<<t[i]<<",";
    }
    cout<<endl;
}

void show_vd(vector<double> t){
    // //cout<<"show_vi"<<endl;
    for(int i = 0;i<t.size();i++){
        cout<<t[i]<<",";
    }
    cout<<endl;
}
void show_vll(vector<ll> t){
    // //cout<<"show_vi"<<endl;
    for(int i = 0;i<t.size();i++){
        cout<<t[i]<<",";
    }
    cout<<endl;
}


void show_vt(vector<tuple<long long,long long>> t){
    // //cout<<"show_vi"<<endl;
    for(int i = 0;i<t.size();i++){
        cout<<get<0>(t[i])<<" "<<get<1>(t[i])<<"::";
    }
    cout<<endl;
}

void show_vb(vector<bool> t){
    // //cout<<"show_vi"<<endl;
    for(int i = 0;i<t.size();i++){
        cout<<t[i]<<" ";
    }
    cout<<endl;
}

void show_vvi(vector<vector<int>> ans){
    cout<<"---------------------------"<<endl;
    for(int i = 0;i<ans.size();i++){
        show_vi(ans[i]);
    }
    cout<<endl;
}

int randd(){
    // struct timeval end_time;
    timeval start_time;
    // cout<<"ok"<<endl;
    long milli_time, seconds, useconds;
    gettimeofday(&start_time, NULL);
    seconds = start_time.tv_sec;
    useconds = start_time.tv_usec;
    milli_time = ((seconds) * 1000 + useconds/1000.0);
    if(time_seed==0){
        time_seed = 1;
        srand(milli_time);
    }
    int k = rand();
    return k;
}

void show_vvvi(vvvi ans){
    for(int i = 0;i<ans.size();i++){
    cout<<"******************"<<endl;
        show_vvi(ans[i]);
    }
    cout<<endl;
}


void show_vvb(vector<vector<bool>> ans){
    cout<<"---------------------------"<<endl;
    for(int i = 0;i<ans.size();i++){
        show_vb(ans[i]);
    }
    cout<<endl;
}

void show_vs(vector<string> A){
    for(int i =0;i<A.size();i++){
        cout<<A[i]<<"::";
    }
    cout<<endl;
}

void show_vc(vector<char> A){
    for(int i =0;i<A.size();i++){
        cout<<A[i];
    }
    cout<<endl;
}

void show_vvc(vector<vector<char>> A){
    cout<<"---------------------------"<<endl;
    for(int i =0;i<A.size();i++){
        show_vc(A[i]);
    }
}

void show_vvs(vector<vector<string>> A){
    for(int i = 0;i<A.size();i++){
        show_vs(A[i]);
    }
}

void show_um(unordered_map<int,int> &map){
    unordered_map<int,int>::iterator it;
    it = map.begin();
    // int count = -6;
    while(it!=map.end()){
        cout<<it->ff<<" "<<it->second<<"::";
        // count ++;
        it++;
    }
    cout<<endl;
}

ll ncr(ll n, ll r) 
{ 
    // if(dp[n]!=-1) return dp[n];
    if (r > n - r) 
        r = n - r; 
    ll C[r + 1]; 
    memset(C, 0, sizeof(C)); 
  
    C[0] = 1; 
    for (ll i = 1; i <= n; i++) { 
        for (int j = min(i, r); j > 0; j--) {
                C[j] = (C[j] + C[j - 1]) ; 
                C[j]%=mod;
            }
    } 
    return C[r]; 
} 

int fact(int n){
    return (n==0)?1:(ll)(n*fact(n-1))%mod;
}

int hcf(int a,int b){
    if(a%b==0) return b;
    return hcf(b,a%b);
}


vll prime_factors(ll n){
    vll ans;
    while (n % 2 == 0)  
    {  
        ans.push_back(2);
        n = n/2;  
    }  
   
    for (int i = 3; i <= sqrt(n); i = i + 2)  
    {   
        while (n % i == 0)  
        {  
            ans.push_back(i);  
            n = n/i;  
        }  
    }  
    if (n > 2)  
        ans.push_back(n);
    return ans;
}

ll pow_m(ll a,ll b){
    // cout<<a<<" "<<b<<endl;
    if(b==1) return a%mod;
    if(b==0) return 1%mod;
    ll k = (ll)pow_m(a,b/2);
    if(b%2){
        return (((k*k)%mod)*a)%mod;
    }
    else return (((k*k)%mod));

}

int modInverse(int a, int m) 
{ 
    return pow_m(a,m-2); 
} 

bool isPrime(int n) 
{ 
    // Corner cases 
    if (n <= 1) 
        return false; 
    if (n <= 3) 
        return true; 
  
    // This is checked so that we can skip 
    // middle five numbers in below loop 
    if (n % 2 == 0 || n % 3 == 0) 
        return false; 
  
    for (int i = 5; i * i <= n; i = i + 6) 
        if (n % i == 0 || n % (i + 2) == 0) 
            return false; 
  
    return true; 
} 


string int_to_hex(int a){
    if(a==0) return "0";
    string ans;
    while(a){
        int k = a%16;
        if(k<=9){
            ans+=('0'+k);
        }
        else{
            ans+=('A'+(k-10));
        }
        a/=16;
    }
    reverse(ans.begin(), ans.end());
    return ans;
}



int cnt_digit(ll a){
    int ans = 0;
    while(a!=0){
        ans++;
        a/=10;
    }
    return ans;
}

ll ncrr(ll a,ll b){
    // cout<<a<<" "<<b<<endl;
    ll ans = 1;
    for(int i = 0;i<b;i++){
        ans*=a;
        a--;
        ans%=mod;
    }

    for(int i = 1;i<=b;i++){
        ans*=(modInverse(i,mod));
        ans%=mod;
    }
    return ans;
}

void solve(){
    int a,b,k;
    cin>>a>>b>>k;
    
    if(k==0){
    cout<<"YES"<<endl;
    for(int i = 0;i<b;i++) cout<<1;
    for(int i = 0;i<a;i++) cout<<0;
        cout<<endl;
    
        for(int i = 0;i<b;i++) cout<<1;
        for(int i = 0;i<a;i++) cout<<0;
        cout<<endl;
        return;
    }
    if(a==0||b<2){
        cout<<"NO"<<endl;
        return;
    }
    if(k>a+b-2||(b==1&&k>0)){
        cout<<"NO"<<endl;
        return;
    }
    cout<<"YES"<<endl;
    for(int i = 0;i<b;i++) cout<<1;
    for(int i = 0;i<a;i++) cout<<0;
    cout<<endl;
    // cout<<1;
    int c = k;
    k = min(a,k);
    string s;
    for(int i = 0;i<b-1;i++) s+='1';
    for(int i = 0;i<k;i++) s+='0';
    s+='1';
    for(int i = 0;i<a-k;i++) s+='0';
        // cout<<"ok "<<s<<endl;
    if(k==c){
        cout<<s<<endl;
        return;
    }
    c-=k;
    // cout<<c<<" "<<b<<endl;
    int l = b-1;
    while(c>0){
        swap(s[l],s[l-1]);
        l--;
        c--;
    }
    cout<<s<<endl;
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    int t = 1;
    // cin>>t;
    for(int i = 1;i<=t;i++){
        solve();
    }
    return 0;
}