void main(){
	int a, b, c, k;
	readf("%d %d %d\n", &a, &b, &c);
	k = _scan();
	// k回の操作
	foreach(i; 0..k){
		// Cが他のどれよりも大きくない.
		if(c<=a || c<=b){
			c *= 2;
			continue;
		}
		// BがAより大きくない.
		if(b<=a){
			b *= 2;
			continue;
		}
	}
	// 結果
	bool MagicRes = true;
	if(c<=b || c<=b || b<=a)MagicRes=false;
	writeln(MagicRes? "Yes": "No");
}

import std.stdio, std.conv, std.algorithm, std.numeric, std.string, std.math;

// 1要素のみの入力
T _scan(T= int)(){
	return to!(T)( readln().chomp() );
}

// 1行に同一型の複数入力
T[] _scanln(T = int)(){
	T[] ln;
	foreach(string elm; readln().chomp().split()){
		ln ~= elm.to!T();
	}
	return ln;
}
