#include<bits/stdc++.h>
#include <math.h>
#include <unordered_map>
#include <unordered_set>
#include <tuple>
#include<map>
using namespace std;
#define ll long long int
typedef unsigned long long int ull;
typedef long double ldb;
#define B 1000000007
#define rep(i,a,b) for(ll i=a;i<b;i++)
#define repi(i,a,b) for(ll i=b-1;i>=a;i--)
#define MT make_tuple
#define G(a,b) get<a>(b)
#define VI vector<int>
#define VLL vector<long long int>
#define pb push_back
#define LB lower_bound
#define UB upper_bound
#define mp make_pair
#define sz size()
#define deci(n) fixed << setprecision(n)
#define INF 1e18
#define IOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define M 1001
const int maxn = 2e5 + 42;
#define endl "\n"
 /*SOME BITMASK KNOWLEDGE
1)x & (x - 1):sets the last one bit of x to zero
power of two exactly when x & (x − 1) = 0.
2)x & -x:sets all the one bits to zero, except last one bit
3)x | (x - 1):inverts all the bits after the last one bit
4)(a^b) = (a|b)-(a&b) = (a+b-2*(a&b))
4) a & ~(nextpowerof2(a^b)-1) print the bitwise AND of all natural numbers in the inclusive range a and b
5)(a+b) = a^b + 2*(a&b)
6)   lowest set bit of N =n ^ ( n & (n-1));
 x ^ ( x & (x-1)) : Returns the rightmost 1 in binary representation of x.
7)    Turn off 1st set bit= n^(n&(-n));
8) clear all bits from MSB to ith bit  = n&((1<<i)-1);    
9) clear all bits from LSB= n&(~((1<<(i+1))-1))      
10) if a%m<0 then compute (a%m+m)%m    
11) int __builtin_ffs (int x) Returns one plus the index of the least significant 1-bit of x, or if x is zero, returns zero. 
12) int __builtin_clz (unsigned int x)  Returns the number of leading 0-bits in x, starting at the most significant bit position. If x is 0, the result is undefined.
13)  int __builtin_ctz (unsigned int x)    Returns the number of trailing 0-bits in x, starting at the least significant bit position. If x is 0, the result is undefined.
14)   __builtin_popcountl()
15)  __builtin_parityl()  Returns the parity of x, i.e. the number of 1-bits in x modulo 2.
16) __builtin_ctz(x) returns number of trailing 0-bits of x which starts from least significant bit position if x == 0, returns an undefined value.
 17)  for any two relatively prime positive integers m,nm,n, the greatest integer that cannot be written in the form am + bnam+bn for nonnegative integers a, ba,b is \ mn-m-n mn−m−n  */
ll max(ll a,ll b){return a>b?a:b;}
ll min(ll a,ll b){return a<b?a:b;}
ll gcd(ll a,ll b){while(b){ll t=a;a=b;b=t%b;}return a;}     
ll lcm(ll a,ll b){return (max(a,b)/gcd(a,b))*min(a,b);}
void pairsort(ll a[], ll b[], ll n) 
{ 
    pair<ll, ll> pairt[n]; 
  
 
    for (ll i = 0; i < n; i++)  
    { 
        pairt[i].first = a[i]; 
        pairt[i].second = b[i]; 
    } 
  
    sort(pairt, pairt + n); 
      
    for (ll i = 0; i < n; i++)  
    { 
        a[i] = pairt[i].first; 
        b[i] = pairt[i].second; 
    } 
}
 
ll extendedGcd(ll a, ll b, ll & x, ll & y) {
    if (a == 0) {
        x = 0;
        y = 1;
        return b;
    }
    ll x1, y1;
    ll d = extendedGcd(b % a, a, x1, y1);
    x = y1 - (b / a) * x1;
    y = x1;
    return d;
}


  ll binaryToDecimal(string n) 
{ 
    string num = n; 
    ll dec_value = 0; 
    // Initializing base value to 1, i.e 2^0 
    ll base = 1;  
    ll len = num.length(); 
    for (ll i = len - 1; i >= 0; i--) { 
        if (num[i] == '1') 
            dec_value += base; 
        base = base * 2; 
    } 
    return dec_value; 
} 


ll nCr(ll n,ll k){ 
    ll C[n + 1][k + 1]; 
    ll i, j; 
    for (i=0;i<=n;i++){ 
        for(j=0;j<=min(i,k);j++){
            if(j==0||j==i) 
                C[i][j]=1;  
            else
                C[i][j]=(C[i-1][j-1]%B+C[i-1][j]%B)%B; 
        } 
    }
    return C[n][k]%B; 
} 


ll countDivisors(ll n) 
{ 
    ll cnt = 0; 
    for (ll i = 1; i <= sqrt(n); i++) 
    { 
        if (n % i == 0) 
        { 
            // If divisors are equal, 
            // count only one 
            if (n / i == i) 
                cnt++; 
  
            else // Otherwise count both 
                cnt = cnt + 2; 
        } 
    } 
    return cnt; 
}

/*
void dfs(int p,vector<int> a[],int v[])
{
    if(v[p])
        return ;
    v[p]=1;
    for(int i=0;i<a[p].size();i++)
    {
        if(!v[a[p][i]])
        dfs(a[p][i],a,v);
    }
} 

int v[M][M];
char a[M][M];
int cx[]={0,0,-1,1};
int cy[]={1,-1,0,0};
int dfs(int x,int y,int n)
{
    if(v[x][y])
        return 0;
    v[x][y]=1;
    int count=0;
    for(int i=0;i<4;i++)
    {
        int dx=x+cx[i];
        int dy=y+cy[i];
        if(dx>=0 && dx<n && dy>=0 && dy<n && a[x][y]=='1')
            count+=dfs(dx,dy,n);
    }

return count;
}

int solve(int n,char cake[N][N])
{
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            a[i][j]=cake[i][j];

    int maxi=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(a[i][j]=='1' && v[i][j]==0)
                maxi=max(maxi,dfs(i,j,n));
        
    return maxi;
}

BITMASK
for( int inum = 0 ; inum < ( 1 << n ) ; ++ inum ) {
     for ( int pos = 0; pos < n ; ++pos ) {
         if (  inum & ( 1 << pos )  ){
              results[inum] += s [pos] ; //DO SOMETHING
         }
     }
}
*/

ll highestPowerof2(ll n) 
{ 
   ll p = (ll)log2(n); 
    return (ll)pow(2, p);  
} 
ll smallestDivisor(ll n) 
{ 
    // if divisible by 2 
    if (n % 2 == 0) 
        return 2; 
  
    // iterate from 3 to sqrt(n) 
    for (ll i = 3; i * i <= n; i += 2) { 
        if (n % i == 0) 
            return i; 
    } 
  
    return n; 
} 
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; 
} 



const int maxN = 100001;
int st[4*maxN];
int arr[maxN];
void build(int si , int ss , int se) //1-based indexing i.e, initially s1=1,ss=1,se=n
{
    if(ss == se)
    {
        st[si]=arr[ss];
        return;
    }
    int mid = (ss + se) / 2;
    build( 2*si , ss , mid);
    build( 2*si+1, mid+1 , se);
    st[si]= min(st[2*si],st[2*si+1]);
}

int query(int si,int ss,int se,int qs,int qe)
{
    if(qs>se || qe<ss) // completely outside
        return maxN;
    if(ss>=qs && se<=qe) // completely inside
        return st[si];

    int mid=(ss+se)/2;
    int leftans =query(2*si,ss,mid,qs,qe);
    int rightans=query(2*si+1,mid+1,se,qs,qe);
    return min(leftans,rightans);
}

void update(int si,int ss,int se,int qi) // logn time
{
    if(ss==se)
    {
        st[si]=arr[ss];
        return ;
    }
    int mid=(ss+se)/2;
    if(qi<=mid) update(2*si,ss,mid,qi);
    else update(2*si+1,mid+1,se,qi);

    st[si]=min(st[2*si],st[2*si+1]);
}

#define SIZE 200002
vector<long long int> factorial() 
{ 
    int i; 
    vector<long long int> fact(SIZE + 1, 0); 
    fact[0] = 1; 
    for (i = 1; i <= SIZE; i++)
        fact[i] = (fact[i - 1] * i) % B; 
    return fact;
} 

   void KMP(string text,string pattern,int lps[])
        {
            int n=text.size();
            int m=pattern.size();

            int i=0;
            int j=0;
            while(i<n)
            {
                if(text[i]==pattern[j])
                {
                    i++;
                    j++;
                }
                else
                    if(j!=0)
                        j=lps[j-1];
                    else 
                        i++;

                if(j==m)
                 {  cout<<"FOUND"<<endl;
                    j=lps[j-1]; //For all occurrences
                 }
            }
        }

    
        void computeLPS(string pattern,int m,int lps[])
        {
            lps[0]=0;
            int len=0;
             int i=1;
            while(i<m)
            {
                if(pattern[i]==pattern[len])
                {
                    lps[i]=len+1;
                    i++;
                    len++;
                }
                else
                {
                    if(len!=0)
                        len=lps[len-1];
                    else
                    {
                        lps[i]=0;
                        i++;
                    }
                }
            }
        }
        
int main()
{ 
IOS;
    int t1=1;
    // cin>>t1;
    while(t1--)
    {
        // ll n;cin>>n; ll a[n]; rep(i,0,n)cin>>a[i];
        
        int a,b,c,k;
        cin>>a>>b>>c>>k;
        int cn=0;
       while(b<=a)
       {
        b*=2;
        cn++;
       }


       while(c<=b)
       {
        c*=2;
        cn++;
       }

        if(cn<=k)
            cout<<"Yes";
        else
            cout<<"No";





        
















    
    
    
        }
return 0;
}

Measured memory_bytes: 3696