1. 从牌面上可以得到一个上面(单独上限)
  2. 然后总的牌面又可以得到一个上限。
  3. 这两个上限的最小
#include<bits/stdc++.h>
using namespace std;
//模拟赛
int main(){

    long long E,EM,M,MH,H;
    cin>>E>>EM>>M>>MH>>H;

    //从单独组牌来考虑问题得上届
    long long easy = E+EM;
    long long mid = EM+M+MH;
    long long hard = MH+H;
     //从单独组牌来考虑问题得上届
    long long upper = min(easy,min(mid,hard));

    // 以共同出现得上界和单独出现得上界取最小。
    long long ans = min((E+EM+M+MH+H)/3,upper);



    cout<<ans<<endl;


    return 0;
}