// Original C++ solution (slower):
#include<iostream>

#include <bits/stdc++.h>

#define ll long long

#define ld long double

#define IO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

using namespace std;

int n, a[60], k, ans;

vector<int> v[60][60];

int main()

{

    IO

    cin>>n>>k;

    for(int i=1; i<=n; i++)

        cin>>a[i];

    for(int i=0; i<=n; i++)

        for(int j=0; j<=n; j++)

        {

            for(int ii=1; ii<=i; ii++)

                v[i][j].push_back(a[ii]);

            for(int ii=n; ii>=n-j+1; ii--)

                v[i][j].push_back(a[ii]);

            sort(v[i][j].begin(),v[i][j].end());

        }

    for(int i=0; i<=k; i++)

        for(int j=0; j<=k; j++)

            for(int r=0; r<=k; r++)

            {

                if(i+j+r>k || i+j>n || r>i+j)

                    continue;

                int sum=0;

                for(auto t : v[i][j])

                    sum+=t;

                for(int t=0; t<r; t++)

                    sum-=v[i][j][t];

                ans=max(ans,sum);

            }

    cout<<ans;



}


// Optimized solution to the same problem (faster):
#include <bits/stdc++.h>

using namespace std;





//TEMPLATE

#define pb                push_back

#define mp                make_pair

#define ll                long long

#define ld                long double

#define pii               pair <ll, ll>

#define piii              pair <ll, pii>

#define F                 first

#define S                 second



#define newline           printf("\n")

#define minusone          printf("-1\n")

#define zeroo             printf("0\n")

#define scl1(a)           scanf("%lld", &a)

#define scl2(a, b)        scanf("%lld %lld", &a, &b)

#define scl3(a, b, c)     scanf("%lld %lld %lld", &a, &b, &c)

#define prl1(a)           printf("%lld\n", a)

#define prl2(a, b)        printf("%lld %lld\n", a, b)

#define ssl1(s)           scanf(" %[^\n]", s)

#define scd1(a)           scanf("%lf", &a)

#define scd2(a, b)        scanf("%lf %lf", &a, &b)

#define prd(a)            printf("%lf\n", a)

#define prld(a)           printf("%Lf\n", a)

#define prcase(cs)        printf("Case %lld: ", cs)

#define cin1(a)           cin >> a

#define cin2(a, b)        cin >> a >> b

#define cin3(a, b, c)     cin >> a >> b >> c

#define cin4(a, b, c, d)  cin >> a >> b >> c >> d

#define cot1(a)           cout << a << "\n"

#define cot2(a, b)        cout << a << " " << b << "\n"

#define cot3(a, b, c)     cout << a << " " << b << " " << c << "\n"

#define cot4(a, b, c, d)  cout << a << " " << b << " " << c << " " << d << "\n"

#define cotline           cout << "\n"

#define cotminus          cout << "-1\n"

#define cot0              cout << "0\n"

#define cotyes            cout << "YES\n"

#define cotno             cout << "NO\n"

#define cotcase(cs)       cout << "Case " << cs << ": "



#define reversed(s)       reverse(s.begin(), s.end())

#define asort(s)          sort(s.begin(), s.end())

#define dsort(s)          sort(s.rbegin(), s.rend())

#define all(s)            s.begin(), s.end()

#define uniq(s)           s.resize(distance(s.begin(),unique(s.begin(), s.end())))

#define found(s, x)       (s.find(x) != s.end())



#define for0(i, n)        for (i = 0; i < n; i++)

#define for1(i, n)        for (i = 1; i <= n; i++)

#define fora(i, a, b)     for (i = a; i <= b; i++)

#define forb(i, b, a)     for (i = b; i >= a; i--)

#define fori(it, s)       for(auto it = s.begin(); it != s.end(); it++)



#define FR                ios_base::sync_with_stdio(false);cin.tie(NULL)

#define ms(a, x)          memset(a, x, sizeof a)

#define bitcount(n)       __builtin_popcountll(n)



//#define pi              3.1415926536

#define pi                acos(-1)



const ll INF = LLONG_MAX;

const ll SZ = 2e2+5;

const ll mod = 1e9+7;





ll n, k;

ll a[SZ];

//ll b[SZ];



ll solve(ll r1, ll r2, ll c) {

    ll i, x, sum(0);



    priority_queue <ll, vector <ll>, greater<ll> > pq;



    fora(i, r1, r2) {

        pq.push(a[i]);

    }



    while(c--) {

        if(pq.empty()) break;

        x = pq.top();

        if(x >= 0) break;

        pq.pop();

    }



    while(!pq.empty()) {

        sum += pq.top();

        pq.pop();

    }



    return sum;

}



int main() {

    ll cs = 0, tc = 1, x, y, z, i, j, g, p, q, ans = 0, sum = 0, c = 0, t = 0;

//    ll a, b, d;

    string s, s1, s2;



    cin2(n, k);

    for1(i, n) cin1(a[i]);



    for1(i, n) a[n+i] = a[i];



    for1(i, n) {

        if(i <= k) ans = max(ans, solve(1, i, k-i));



        fora(j, i, n+i-1) {

            t = j - i + 1;

            c = k - t;



            if(c < 0 || j < n) continue;



            ans = max(ans, solve(i, j, c));

        }

    }



    cot1(ans);





    return 0;

}






// Fastest known solution for this problem: