#include<bits/stdc++.h>
using namespace std;
struct node {
int num;
int ll,rr;
node *l,*r;
};
node *temp;
bool build(int listt[],int l,int r) {
if(l==r) {
node* t=new(node);
t->num=listt[l];
t->ll=l;
t->rr=r;
t->l=NULL;
t->r=NULL;
temp=t;
return 1;
}
node* me=new(node);
me->num=0;
me->ll=l;
me->rr=r;
int mid=(l+r)/2;
if(build(listt,l,mid)) {
me->l=temp;
me->num+=temp->num;
}
if(build(listt,mid+1,r)) {
me->r=temp;
me->num+=temp->num;
}
temp=me;
return 1;
}
void tree_add(node* tree,int l,int r,int k) {
printf("%d %d\n",tree->ll,tree->rr);
if(tree->ll>tree->rr)return;
int my_l=tree->ll,my_r=tree->rr;
if(my_l>r||my_r<l)return;
int my_sonl,my_sonr;
if(tree->l!=NULL) {
my_sonl=tree->l->ll,my_sonr=tree->l->rr;
if(!(my_sonl>r||my_sonr<l))tree_add(tree->l,l,r,k);
}
if(tree->r!=NULL) {
my_sonl=tree->r->ll,my_sonr=tree->r->rr;
if(!(my_sonl>r||my_sonr<l))tree_add(tree->r,l,r,k);
}
tree->num+=(r-l+1)*k;
return;
}
int tree_query(node* tree,int l,int r) {
if(l>r)return 0;
int my_l=tree->ll,my_r=tree->rr;
if(my_l>r||my_r<l)return 0;
if(my_l==l&&my_r==r)return tree->num;
int sum=0;
int son_l,son_r;
if(tree->l!=NULL) {
son_l=tree->l->ll,son_r=tree->l->rr;
if(l<=son_r) {
if(r<=son_r) {
sum+=tree_query(tree->l,l,r);
} else {
sum+=tree_query(tree->l,l,son_r);
}
}
}
if(tree->r!=NULL) {
son_l=tree->r->ll,son_r=tree->r->rr;
if(r>=son_l) {
if(l>=son_l) {
sum+=tree_query(tree->r,l,r);
} else {
sum+=tree_query(tree->r,son_l,r);
}
}
}
return sum;
}
int main() {
int a[20];
for(int i=1;i<=5;i++){
cin>>a[i];
}
build(a,1,5);
tree_add(temp,1,2,1);
node* t=temp;
cout<<t->l->l->l->num<<endl;
return 0;
}