#include<bits/stdc++.h>
#define ll long long int
#define pb push_back
#define mp make_pair
#define fastio ios_base::sync_with_stdio(false);cin.tie(NULL);
using namespace std;
//Some custom functions for quick use(fast_power,nCr,lcm,gcd)
// ll power(ll a, ll b)
// {
//   if(b == 0)
//    {
//       return 1;
//    }
//    else if(b % 2 == 0)
//    {
//       return power(a*a, b/2);
//    }
//    else
//    {
//       return a * power(a*a, b/2);
//    }
// }
// long long int nChoosek( long long int n, long long int k )
// {
// if (k > n) return 0;
// if (k * 2 > n) k = n-k;
// if (k == 0) return 1;
//     int result = n;
// for( int i = 2; i <= k; ++i )
// {
//         result *= (n-i+1);
//         result /= i;
// }
//     return result;
// }

// long long int lcm(long long int a,long long int b)
// {
//     long long int m,n;
//     m=a;
//     n=b;
//     while(m!=n)
//     {
//         if(m < n)
//         {
//             m=m+a;
//         }
//         else
//         {
//             n=n+b;
//         }
//     }
//     return m;
// }

// long long int gcd(long long int a,long long int b)
// { 
// if (a == 0) 
// return b; 
// return gcd(b % a, a);
// }
/* Basic DFS Boilerplate */ 
vector<ll> adj[10005]; // graph is stored as adjacency list
bool visited[10005];
void dfs(ll s)  //given node s
{
    if(visited[s])
        return;
    visited[s]=true;
    //the process on node 's'
    for(auto u : adj[s])
    {
        dfs(u);
    }    
}
// /* Basic BFS Boilerplate */
// ll x;   // given node
// queue<ll>q;
// bool vis[10005];
// ll dist[10005];
// //
// void bfs(ll x)
// {
//     vis[x]=true;
//     dist[x]=0LL;
//     q.push(x);
//     while (!q.empty())
//     {
//         ll s=q.front();
//         q.pop();
//         //the process
//         //on node x
//         for(auto u :adj[x])
//         {
//             if(vis[u]==true)
//                 continue;
//             vis[u]=true;
//             dist[u]=dist[x]+1;
//             q.push(u);
//         }
//     }    
// }

// ll printAllSubstrings(string s, int n)  
// { 
//     ll count=0;
//     for (int i = 0; i < n; i++) 
//     { 
//         vector<char> temp(n-i+1); 
//         int tempindex = 0;
//         string temps="";
//         for (int j = i; j < n; j++) 
//         { 
//             temp[tempindex++] = s[j];
//             temps+=s[j];
//             temp[tempindex] = '\0'; 
//             // printf("%s\n", temp);
//             ll tempnum=stoll(temps);
//             if(tempnum%2019==0)
//             {
//                 count++;
//             }
//         } 
//     } 
//     return count;
// }
// const ll N = 1e7;
// bool is_prime[N] = {true};
// void sieve(ll n)
// {
//     is_prime[0]=false;
//     is_prime[1]=false;
//     for(ll i=2;i*i<=n;i++)
//     {
//         if(is_prime[i]==true)
//         {
//             for(ll j=i*i;j<=n;j+=i) //the main step
//             {
//                 is_prime[j]=false;
//             }
//         }
//     }
// }
int main()
{
    fastio
    ll a,b,c,k;
    cin>>a>>b>>c>>k;
    ll mx=0;
    if(k<=a)
    {
        cout<<k<<'\n';
    }
    else
    {
        mx+=a;
        k-=a;
        if(k<=b)
        {
            cout<<mx<<'\n';
        }
        else
        {
            k-=b;
            mx-= k;
            cout<<mx<<'\n';
        }
    }
    
    return 0;
}


Measured memory_bytes: 3876