#include<bits/stdc++.h>
using namespace std;
#define DBG(a) if(DBGDO) cout<<#a<<':'<<a<<endl;
#define PB push_back
#define EB emplace_back
#define MP make_pair
#define btoe(v) (v).begin(),(v).end()
#define etob(v) (v).rbegin(),(v).rend()
#define F first
#define S second
#define SZ size()
#define pow(a,b) (pow(a,b)+0.5)

typedef unsigned long long int ulli;
typedef long long int lli;
typedef long double ldbl;
#define f(i,a,b) for(int i=(a); i<(b); ++i)
#define fr(i,a,b) for(int i=(a); i>(b); --i)
#define fl(i,a,b) for(lli i=(a); i<(b); ++i)
#define flr(i,a,b) for(lli i=(a); i>(b); --i)
#define w(x) lli x; cin>>x; while(x--) 
#define inpn(n,v,T) T n; cin>>n; vector<T> v(n); fl(i,0,n) cin>>v[i];
#define inp(n,v,T) vector<T> v(n); fl(i,0,n) cin>>v[i];

typedef pair<int,int> pii;typedef vector<int> vi;typedef vector<vi> vvi;typedef vector<pii> vpii;typedef vector<vector<pii>> vvpii;typedef pair<lli,lli> plli;typedef vector<lli> vlli;typedef vector<vlli> vvlli;typedef vector<plli> vplli;typedef vector<vector<plli>> vvplli;typedef vector<bool> vb;typedef vector<string> vs;typedef vector<vector<string>> vvs;

#define unmp unordered_map

#define PRIME ((lli)(1e9+7ll))
#define PRIME2 (998244353ll)
const lli TEN_18 = 1e18;
const lli TEN_9 = 1e9;
const lli TEN_5 = 1e5;

inline void debugORfast(int a=1,int b=1){
    if(a){
        #ifndef ONLINE_JUDGE
        freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
        #endif
    }
    if(b){ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
}}

template<typename T>
void print(const T &v, int begin=-1, int end=-1, int w=2)
{
	if(begin<=end){
		if(begin==-1) fl(i,0,v.SZ) cout<<setw(w)<<v[i]<<' ';
		else if(end==-1) fl(i,begin,v.SZ) cout<<setw(w)<<v[i]<<' ';
		else fl(i,begin,end) cout<<setw(w)<<v[i]<<' ';
		cout<<endl;}
	else{
		if(begin==-1) flr(i,v.SZ-1,-1) cout<<setw(w)<<v[i]<<' ';
		else if(end==-1) flr(i,begin,-1) cout<<setw(w)<<v[i]<<' ';
		else flr(i,begin,end) cout<<setw(w)<<v[i]<<' ';
		cout<<endl;
	}
}

int DBGDO=0;

vector<vi> g;

string solve(){
	vi deg_one;
	string ans_str = "";

	f(i,0,g.SZ){
		if(g[i].SZ>2) return ans_str;
		else if(g[i].SZ==1) deg_one.PB(i);
	}

	if(deg_one.SZ!=2) return ans_str;

	queue<int> q;
	q.push(deg_one.front());
	vb visited(26,false);
	while(!q.empty()){
		int u = q.front(); q.pop();
		ans_str += (char)('a'+u);
		visited[u] = true;
		for(int v:g[u]){
			if(!visited[v]){
				q.push(v);
			}
		}
	}

	visited.clear();
	visited.resize(26,false);

	for(char s:ans_str){
		visited[s-'a']=true;
	}

	f(i,0,26){
		if(!visited[i]) ans_str += (char)('a'+i);
	}

	return ans_str;
}

int main()
{

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

	while(k>0 and a>=b){
		b*=2;
		--k;
	}

	while(k>0 and b>=c){
		c*=2;
		--k;
	}

	if(b>a and c>b) cout<<"Yes"<<endl;
	else cout<<"No"<<endl;

	return 0;



	w(tt){
		string s;
		cin>>s;
		g.clear();
		g.resize(26,vi());
		f(i,0,s.SZ-1){
			bool added=false;
			int a = s[i]-'a';
			int b = s[i+1]-'a';

			//cout<<i<<' '<<a<<' '<<b<<endl;

			for(int v : g[a]){
				if(v==b) added=true;
			}

			if(!added){
				g[a].EB(b);
				g[b].EB(a);
			}

			//cout<<"--"<<endl;
			//f(i,0,26) print(g[i]);
			//cout<<"--"<<endl;
		}

		//check deg more than two
		bool ans = true;
		f(i,0,26){
			if(g[i].SZ>2) ans=false;
		}

		if(!ans){
			cout<<"NO"<<endl;
			continue;
		}

		string ans_str = solve();

		if(ans_str.SZ==0){
			cout<<"NO"<<endl;
		}else{
			cout<<"YES"<<endl;
			cout<<ans_str<<endl;
		}
	}
}




Measured memory_bytes: 3628