#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mod ll(1e9+7)
ll exp(ll a,ll b)
{
  if(b==0)
    return 1;
  if(b%2==0)
    return exp(a*a%mod,b/2);
  return a*exp(a*a%mod,(b-1)/2)%mod;
}
int main()
{
  #ifndef ONLINE_JUDGE
   freopen("input.txt","r",stdin);
   freopen("output.txt","w",stdout);
  #endif
   int n,k;
   cin>>n>>k;
   vector<int>arr(n+1);
   for(int i=1; i<=n; i++){
    cin>>arr[i];
   }
   int mx=0;
   for(int i=0; i<=k; i++){
    for(int j=0; j<=(k-i); j++){
      if(i+j>=n){
        vector<int>ans;
        int sum=0;
        for(int x=1; x<=n; x++){
          sum+=arr[x];
          ans.push_back(arr[x]);
        }
        sort(ans.begin(),ans.end());
        int num=min(n,k-n);
        for(int x=0; x<num; x++){
          if(ans[x]>=0)
            break;
          sum-=ans[x];
        }
        mx=max(sum,mx);
      }
      else{
        vector<int>ans;
        int sum=0;
        for(int x=1; x<=i; x++){
          ans.push_back(arr[x]);
          sum+=arr[x];
        }
        for(int x=n; x>=(n-j+1); x--){
          ans.push_back(arr[x]);
          sum+=arr[x];
        }
        int num=min(i+j,k-(i+j));
        sort(ans.begin(),ans.end());
        for(int x=0; x<num; x++){
          if(ans[x]>=0)
            break;
          sum-=ans[x];
        }
        mx=max(sum,mx);
      }
    }
   }
   cout<<mx;
   return 0;
}
#include <bits/stdc++.h>
using namespace std;

#define REP(i, n) for(int i = 0; i < n; i++)
#define REPR(i, n) for(int i = n; i >= 0; i--)
#define FOR(i, m, n) for(int i = m; i < n; i++)
#define ALL(obj) (obj).begin(), (obj).end()
#define INF 1e9
typedef long long ll;


int main() {
    int N,K;
    cin >> N >> K;
    deque<int> V_origin;
    REP(i,N){
        int v;
        cin >> v;
        V_origin.push_back(v);
    }


    int ans = 0;
    int KK = K;
    K = min(K,N);

    REP(i,K/2+1){
        REP(j,K-i+1){
            //cout << "front: "<< j <<  ", back: " << K-i-j << ", return: " << i << endl;
            deque<int> V(V_origin);
            vector<int> my;
            REP(k,j){
                int d = V.front();
                V.pop_front();
                my.push_back(d);
            }
            FOR(k,j+1,K-i+1){
                int d = V.back();
                V.pop_back();
                my.push_back(d);
            }
            sort(ALL(my));

            REP(x,KK-K+i+1){
                int count = 0;
                FOR(k,x,my.size()){
                    count += my[k];
                }
                ans = max(ans,count);
                //cout << count << endl;
            }
        }
    }
    ans = max(ans, 0);
    cout << ans << endl;
    return 0;
}