#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main() {
    string sa,sb,sc;
    cin >> sa >> sb >> sc;
    queue<char> qa,qb,qc;
    for(int i = 0; i < sa.size(); i++) qa.push(sa[i]);
    for(int i = 0; i < sb.size(); i++) qb.push(sb[i]);
    for(int i = 0; i < sc.size(); i++) qc.push(sc[i]);
    qa.push('w'),qb.push('w'),qc.push('w');
    char x=qa.front();
    qa.pop();
    while(!qa.empty() && !qb.empty() && !qc.empty()){
        if(x=='a'){
            x=qa.front();
            qa.pop();
        }
        if(x=='b'){
            x=qb.front();
            qb.pop();
        }
        if(x=='c'){
            x=qc.front();
            qc.pop();
        }
    }

    if(qa.empty()) cout << 'A' << endl;
    else if(qb.empty()) cout << 'B' << endl;
    else cout << 'C' << endl;

    return 0;
}
#include<stdio.h>
#include<iostream>
#include<vector>
#include<math.h>
#include<queue>
#include<map>
#include<algorithm>
#include<string.h>
#include<functional>
#include<limits.h>
#include<stdlib.h>
#include<string>
#include<unordered_map>
#include <iomanip>
using namespace std;
 
#define intmax INT_MAX
#define lmax LONG_MAX
#define uintmax UINT_MAX
#define ulmax ULONG_MAX
#define llmax LLONG_MAX
#define ll long long
#define rep(i,a,N) for((i)=(a);(i)<(N);(i)++)
#define rrp(i,N,a) for((i)=(N)-1;(i)>=(a);(i)--)
#define llfor ll i,j,k
#define sc(a) cin>>a
#define pr(a) cout<<a<<endl
#define pY puts("YES")
#define pN puts("NO")
#define py puts("Yes")
#define pn puts("No")
#define pnn printf("\n")
#define sort(a) sort(a.begin(),a.end())
#define push(a,b) (a).push_back(b)
#define llvec vector<vector<ll>>
#define charvec vector<vector<char>>
#define sizeoof(a,b) (a,vector<ll>(b))
#define llpvec vector<pair<ll,ll>>
/*繰り上げ除算*/ll cei(ll x,ll y){ll ans=x/y;if(x%y!=0)ans++;return ans;}
/*最大公約数*/ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
/*最小公倍数*/ll lcm(ll x,ll y){return x/gcd(x,y)*y;}
/*n乗*/ll llpow(ll x,ll n){ll i,ans=1;rep(i,0,n)ans*=x;return ans;}
/*階乗*/ll fact(ll x){ll i,ans=1;rep(i,0,x)ans*=(x-i);return ans;}
/*nCr*/ll ncr(ll n,ll r){return fact(n)/fact(r)/fact(n-r);}
/*nPr*/ll npr(ll n,ll r){return fact(n)/fact(n-r);}
/*primejudge*/bool prime(ll a){if(a<=1)return false;ll i;for(i=2;i*i<=a;i++){if(a%i==0)return false;}return true;}
ll ans=0;llfor;///////////////////////////////////////////////////////////
int digit(int n){
   if(n < 10)  return n;
   return digit(n/10) + n%10;
}
int main(){
  int A,B,C,K;
  cin>>A>>B>>C>>K;
  
  cout<<max({A,B,C})*pow(2,K)+A+B+C-max({A,B,C});
return 0;}
