
#include<bits/stdc++.h>
using namespace std;

#define ff                first
#define brn                "\n"
#define ss                second
#define mk                make_pair
#define int               long long
#define pb                push_back
#define ps(x,y)           fixed<<setprecision(y)<<x
#define w(x)              int x; cin>>x; while(x--)
#define FOR(i,a,b)        for(int i=(a);i<(b);i++)
#define ROF(i,a,b)        for(int i=(a);i>=(b);i--)
#define so(a,n)           sort(a,a+n)
#define rso(a,n)          sort(a,a+n),reverse(a,a+n)
#define all(v)            (v).begin(),(v).end()
#define ps(x,y)           fixed<<setprecision(y)<<x
#define sz                size();
#define p_sieve           10000007
const int                 maxn = 1e3 + 5;
const int                 modulo=1000000007;
#define mod               1000000009;
const double              pi=3.14159;


//check n==1 and base cases//
//don't stuck on 1 question  try another too

// int dp(int a[],int x,int i,int n)
// {
//  if(i>n-1)return 0;

//  if(a[i]>x)
//  {
//    return mini=min(dp(a,x,i+1,n),dp())
//  }
// }
// void zfun(string s)
// {
//  int n;cin>>n;
//  int a[n];
//  FOR(i,0,n)cin>>a[i];
//  int q;cin>>q;
//  int maxi=0;
//  FOR(i,0,q)
//  {
//    int x;cin>>x;
//    if(x==2)
//    {
//      int y;cin>>y;
//      maxi=max(maxi,y);
//    }
//    else
//    {
//      int y,z;cin>>y>>z;
//      a[y-1]=z;
//    }
//  }
//  FOR(i,0,n)
//  {
//    if(a[i]<maxi)a[i]=maxi;
//  }
//  for(auto i:a)cout<<i<<' ';
// }

// int cnt(string s,int i,int n,int tt)
// {
//   if(i>=n)return 0;

//   if(s[i]=='u' and s[i+1]=='u')
//   {
//     return cnt(s,i+2,n,tt+1)+cnt(s,i+1,n,tt);
//   }
//   else if(s[i]=='n' and s[i+1]=='n')
//   {
//     return cnt(s,i+2,n,tt+1)+cnt(s,i+1,n,tt);
//   }
//   // else return cnt(s,i+1,n,tt)+cnt(s,i+1,n,tt);
//   return tt;
// }

// ll dp[N][2][2]={0};
// ll n;
// ll a[100000],b[100000];

// ll maxi(int i,int ch,int x)
// {
//   if(i>=n)return 0;
//   if(dp[i][x][ch]!=-1)return dp[i][x][ch];
//   if(x==0) dp[i][x][ch] = max(maxi(i+1,0,1)+b[i],maxi(i+1,1,1)+a[i]);
//   else if(ch==1)  dp[i][x][ch] = max(maxi(i+1,0,1)+b[i],maxi(i+1,0,0));
//   else if(ch==0) dp[i][x][ch] = max(maxi(i+1,1,1)+a[i],maxi(i+1,1,0));
//   return dp[i][x][ch];
// }




// const int N=100005;
// int dp[N][2][2];
// int a[100005];
// int b[100005];
// int n;
// int maxi(int i,int ch,int x)
// {
//   if(i>=n)return 0;
//   if(dp[i][ch][x]!=-1)return dp[i][ch][x];
//   if(x==0) dp[i][ch][x] = max(maxi(i+1,0,1)+b[i],maxi(i+1,1,1)+a[i]);
//   else if(ch==1)dp[i][ch][x] = max(maxi(i+1,0,1)+b[i],maxi(i+1,0,0));
//   else if(ch==0)dp[i][ch][x] = max(maxi(i+1,1,1)+a[i],maxi(i+1,1,0));
//   return dp[i][ch][x];
// }
// int n,k,m;
// int a[N],b[N],c[N];
// int x,y,cnt=0;
// std::vector<pair<int,int>> v;
// std::vector<int> vec,vec1;
// set<int>s;
//********************************---------always check array boundness-----------****************
 
void solve()
{
  int a,b,c,d;cin>>a>>b>>c>>d;
  cout<<min(a,min(b,min(c,d)));
}
//########################---------code ends here------------------########################################################
int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); 
    //prime_sieve();
    //w(t)
    solve();
}
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <numeric>
#include <utility>
#include <string>

using namespace std;

int main() {
	int a, b, c, d;
	cin >> a >> b >> c >> d;
	int ans = min({a, b, c, d});
	cout << ans << endl;
	return 0;
}
