#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// #include <ext/pb_ds/detail/standard_policies.hpp>
// using namespace __gnu_pdbs;
using namespace std;

// typedef tree<int, null_type, less<int>, rb_tree_tag,
//             tree_order_statistics_node_update>
//     ordered_set;

#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define mt make_tuple
#define eb emplace_back
#define sf(x) sizeof(x)
#define len(x) x.length()
#define sz(x) x.size()
#define fastio() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)

#define LB(x,v) (lower_bound(x.begin(),x.end(),v)-x.begin())
#define UB(x,v) (upper_bound(x.begin(),x.end(),v)-x.begin())
typedef long long ll;
typedef pair<ll,ll> ii;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef unsigned long long ull;
typedef long double ld;
typedef tuple<int,int,int> State;

ll mod = 1e9 + 7;

void err(istream_iterator<string> it) {}
template<typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
	cerr << *it << " = " << a << endl;
	err(++it, args...);
}

#define citc(tc) int tc; cin>>tc; while(tc--)
#define each(a,x) for( auto &a:(x))
#define rep(i, n) for (ll i = 0; i < (n); i++)
#define repr(i, n) for (ll i = (n) - 1; i >= 0; i--)
#define rep2(i, l, r) for (ll i = (l); i < (r); i++)
#define rep2r(i, l, r) for (ll i = (r) - 1; i >= (l); i--)
#define range(a) a.begin(), a.end()
#define deb(x) cout<<#x<<" "<<x<<endl;
#define cini(i) int i; cin>>i;
#define cinll(l) ll l; cin>>l;
#define cinll2(l, z) ll l, z; cin>>l>>z;
#define cinll3(l, z, x) ll l, z, x; cin>>l>>z>>x;
#define cinai(a, n) vi a(n); rep(i, n) { cin>>a[i]; }
#define cinal(a, n) vl a(n); rep(i, n) { cin>>a[i]; }
#define coutai(a, n) rep(i, n) { cout<<a[i]<<" "; } ent;
#define coutal(a, n) rep(i, n) { cout<<a[i]<<" "; } ent;
#define ent cout<<endl;
#define ms(dp, x) memset(dp, x, sf(dp))
#define pi 3.14159265358979323846264338327950

ll powm(ll a, ll b, ll mod) {
	ll res=1;
	while(b) {
		if(b&1)
			res=(res*a)%mod;
		a=(a*a)%mod;
		b>>=1;
	}
	return res;
}
unordered_map<ll,ll>m;

void solve()
{

	ll a,b,c,k,sum = 0;
	cin>>a>>b>>c>>k;
	if(a>=k)
	{
		sum  = k;
		cout<<sum<<"\n";return;
	}
	else
	{
		sum = a;
		k-=a;
	}
	if(b>=k)
	{
		k -= b;
		cout<<sum<<"\n";return;

	}
	else
	{
		k -= b;
	}
	if(c>=k)
	{
		sum -= k;
		cout<<sum<<"\n";return;

	}



}
int main()
{
	int tc;
	// cin>>tc;
	tc = 1;
	while(tc--)
	solve();
}

//
// string s;
// cin>>s;
// if(s.length()<=6)
// {
// 	cout<<"0\n";
// 	return;
// }
// ll x = s.length();
// set<string>s2,s3;
//
// ll n = s.length();
//
// if(n>=3)
// {
// 	string a = "" ;
// 	a += s[n-2];
// 	a += s[n-1];
// 	s2.insert(a);
// }
// if(n>=2)
// {
// 	string a = "" ;
// 	a += s[n-3];
// 	a += s[n-2];
// 	a += s[n-1];
// 	s2.insert(a);
// }
//
//
//
// for(ll i = n-4;i>=5;i--)
// {
// 	string a = "";
// 	a += s[i];
// 	a += s[i+1];
// 	s2.insert(a);
// 	a = "";
// 	a += s[i+2];
// 	a += s[i+3];
// 	s2.insert(a);
//
// 	if(i+2 < n)
// 	{
// 		a = "" ;
// 		a += s[i];
// 		a += s[i+1];
// 		a += s[i+2];
// 		s2.insert(a);
//
// 	 a = "" ;
// 		a += s[i+3];
// 		a += s[i+4];
// 		a += s[i+5];
// 		s2.insert(a);
// 	}
//
// }
//
//
// cout<<s2.size()<<"\n";
//
// for(auto i = s2.begin();i!=s2.end();++i)
// cout<<*i<<"\n";


Measured memory_bytes: 3632