#include <bits/stdc++.h>
using namespace std;
long long max(long long a, long long b) {
  if (a > b) {
    return a;
  } else {
    return b;
  }
}
long long min(long long a, long long b) {
  if (a < b) {
    return a;
  } else {
    return b;
  }
}
struct P {
  double x, y;
  P() {}
  P(double x, double y) : x(x), y(y) {}
  P operator+(const P &a) const { return P(x + a.x, y + a.y); }
  P operator-(const P &a) const { return P(x - a.x, y - a.y); }
  double operator^(const P &a) const { return x * a.x + y * a.y; }
  void in() { scanf("%lf%lf", &x, &y); }
  void out() { printf("REQUIRED %.7f %.7f\n", x, y); }
  double dist(P a, P b) {
    return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
  }
  double sqdist(P a, P b) {
    return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
  }
};
int n, k;
int a[9999];
int b[9999];
int cc[9999];
int bb[9999];
long long res = -100000000;
long long ma[9999];
long long query(long long l, long long r) {
  int length = r - l + 1;
  if (length <= k) return ma[length];
  int cnt = 0;
  for (int i = (1); i <= (n); i++) {
    if ((i < l) || (i > r)) cc[++cnt] = a[i];
  }
  int cnt2 = 0;
  for (int i = (l); i <= (r); i++) bb[++cnt2] = a[i];
  sort(cc + 1, cc + cnt + 1);
  sort(bb + 1, bb + cnt2 + 1);
  int go = 0;
  for (int i = (1); i <= (min(min(cnt, cnt2), k)); i++) {
    if (cc[cnt - i + 1] > bb[i]) go = i;
  }
  for (int i = (1); i <= (go); i++) bb[i] = cc[cnt - i + 1];
  long long sum = 0;
  for (int i = (1); i <= (cnt2); i++) sum += bb[i];
  return sum;
}
int main() {
  scanf("%d%d", &n, &k);
  for (int i = (1); i <= (n); i++) scanf("%d", &a[i]);
  for (int i = (1); i <= (n); i++) b[i] = a[i];
  sort(b + 1, b + n + 1);
  ma[0] = 0;
  for (int i = (n); i >= (1); i--) {
    ma[n - i + 1] = ma[n - i] + b[i];
  }
  for (int i = (1); i <= (n); i++) {
    for (int j = (i); j <= (n); j++) {
      res = max(res, query(i, j));
    }
  }
  printf("%I64d\n", res);
  return 0;
}
