Go: // 九九を出すだけ
package main
import (
	"fmt"
	"os"
	"bufio"
)
var out = bufio.NewWriter(os.Stdout)

func main(){
	defer out.Flush()
	for i:=1; i<10; i++{
		for j:=1; j<10; j++{
			fmt.Fprintf(out, "%dx%d=%d\n", i, j, i*j)
		}
	}
}

C++: #include<iostream>
using namespace std;

int main(void){
  for(int i = 1;i <10;i++){
    for(int j = 1;j < 10;j++){
      cout << i << "x" << j << "=" << i*j << endl;
    }
  }
  return 0;
}

C++: #include<iostream>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std; 
int main(){
  for(int i=1;i<10;i++){
    for(int j=1;j<10;j++){
      cout<<i<<'x'<<j<<'='<<i*j<<endl;
    }
  }

return 0;
}

C++: //ツ暗按可コツづ個フツォツーツマツッツトツづ可従ツづづ出ツ療債づーツつケツづヲツ　ツ禿シツ療債づ債づ按つ「
//1x1=1
//1x2=2
//.
//.
//9x8=72
//9x9=81

#include<iostream>
using namespace std;

int main(void)
{
	/*
	int l, r;
	for(int i = 1; i < 81; i++)
	{
		l = i/9+1;
		r = i%9+1;
		cout << l << 'x' << r << '=' << l*r << endl;
	}
	*/
	cout << "1x1=1" << endl 
		 << "1x2=2" << endl
		 << "." << endl
		 << "." << endl
		 << "9x8=72" << endl
		 << "9x9=81" << endl;
	return 0;
}

C++: #include <iostream>
using namespace std;
int main(void){
    for(int i = 1; i <= 9; i++){
        for(int j = 1; j <= 9; j++){
            cout << i << "x" << j << "=" << i * j << endl;
        }
    }
}

C++: #include <iostream>
using namespace std;
 
int main() {
 
   for(int i = 1;i < 10; i++) {
     for(int j = 1; j < 10; j++) {
       cout << j << 'x' << i << '=' << j * i << endl;
 }
}
   return 0;
}

C++: #include<stdio.h>
int a, b;int main(){for(a=1;a<=9;a++)for(b=1;b<=9;b++)printf("%dx%d=%d\n",a,b,a*b);return 0;}

C++: /*
　　　　 ∧＿∧　にっぽんちゃちゃちゃ
　／＼（　・∀・）／ヽ
（ ●　と　　　つ　● ）　にっぽんちゃちゃちゃ
　＼/⊂、 ノ　　＼ノ
　　　　　し'
*/
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<(int)(n);++i)
#define repone(i,n) for(int i=1;i<(int)(n);++i)
#define repo(i,o,n) for(int i=o;i<(int)(n);++i)
#define Rep(j,n) for(int j=0;j<(int)(n);++j)
#define Repone(j,n) for(int j=1;j<(int)(n);++j)
#define all(v) (v).begin(),(v).end()
#define rall(v) (v).rbegin(),(v).rend()
#define int long long
#define MOD 1000000007
#define INF 9223372036854775807


signed main()
{
  string xyz ="";
int x=0,y=0,z=0,w=0,i=0,j=0,n=0;
repone(i,10){
  Repone(j,10){
    std::cout << i<<"x"<<j<<"="<<i*j<< '\n';
  }
}

}

C++: #include <stdio.h>

int main()
{
  for(int i=1; i<=9; i++){
    for(int j=1; j<=9; j++){
      printf("%dx%d=%d\n",i, j, i*j);
    }
  }
}

C++: #include <iostream>
using namespace std;

int main() {
  int a = 1;
  int b = 1;
  for (0;a < 10 && b < 9;) {
    cout << b << "x" << a << "=" << a*b << endl;
    ++a;
    if (a == 10 && b <= 8) {
    ++b;
    a = 1;
    }
  }
}

C++: #include <iostream>
using namespace std;

int main() {
	for(int i=1;i<=9;i++){
		for(int j=1;j<=9;j++){
			cout<<i<<"x"<<j<<"="<<i*j<<endl;
		}
	}
	// your code goes here
	return 0;
}

C++: ?????????

C++: #include<stdio.h>

int main(){
	while(true);
	return 0;
}

C++: #include <bits/stdc++.h>
using namespace std;
auto solve(){
for(int i=1; i<10; i++)
for(int j=1;j<10; j++)
cout << i << "x" << j << "=" << i*j << endl;
}
int main() {
solve();
return 0;
}

C++: #include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <deque>
#include <list>
#include <string>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <algorithm>

using namespace std;

int main() {

	for (int i = 1; i <= 9; i++) {
		for (int j = 1; j <= 9; j++) {
			printf("%dx%d=%d\n", i, j, i*j);
		}
	}

	return 0;
}

/*@@@@@@@@@@@@@@@@@@@@@@@@@*/
/*@                       @*/
/*@ debug output erased ? @*/
/*@                       @*/
/*@@@@@@@@@@@@@@@@@@@@@@@@@*/

C++: #include <iostream>
#include <algorithm>
using namespace std;

int main() {
    for(int i=1; i<10; ++i) {
        for(int j=1; j<10; ++j) {
            cout << i << "x" << j << "=" << i*j;
            if(i == 9 && j == 9) cout << flush;
            else                 cout << endl;
        }
    }
}

C++: #include <stdio.h>

int main(){
    int i, j a;
    for(i = 1; i < 10; i++){
        for(j = 1; j < 10; j++){
            a = i * j;
            printf("%dx%d=%d\n", i, j, a);
        }
    }
    return 0;
}

C++: #include<iostream>
using namespace std;

int main()
{
	for(int i = 1; i < 10; i++){
		for(int j = 1; j < 10; j++){
			cout << i << "x" << j << "=" << i*j << endl;
		}
	}
	return 0;
}

C++: #include<iostream>
using namespace std;

int main(){
	for(int i=1;i<10;i++){
		for(int j=1;j<10;j++){
			cout<<i<<"x"<<j<<"="<<i*j;
			if(i!=9||j!=9){cout<<endl;}
		}
	}
	return 0;
}

C++: #include <iostream>
using namespace std;
int main(void){
    for(int i= 1; i<10; i++){
        for(int j = 1; j < 10; j++){
            cout << i << "x" << j << "=" << i*j<< endl;
        }
         
         
    }
     
}

C++: #include<stdio.h>

int main(){
    int i,j;
    for(i=1;i<10;i++){
      for(j=1;j<10;j++){
        printf("%dx%d=%d\n",i,j,i*j);
      }
    }
    return 0;
}

C++: #include<iostream>
using namespace std;
int main(){
	for(int a=1;a<10;a++){
		for(int b=1;b<10;b++){
			printf("%dx%d=%d\n",a,b,a*b);
		}
	}
	return 0;
}

C++: #include<iostream>
using namespace std;
int main(){
	for(int i=1;i<10;i++){
		for(int j=1;j<10;j++){
			cout<<i<<"x"<<j<<"="<<i*j<<endl;
		}
	}
	return 0;
}

C++: #include <algorithm>
#include <cstdio>

using namespace std;

int main(){
   for(int i = 0; i < 9; i++){
       for(int j = 0; j < 9; j++){
           printf("%dx%d=%d\n",i + 1, j + 1, (i + 1) * (j + 1));
       }
   }

   return 0;

}

C++: #include<stdio.h>
int main(void)
{
	int a,i;
	for (a = 1; a <= 9; a++) {
		for (i = 1; i <= 9; i++) {
			printf("%dx%d=%d\n",a,i,a*i);
		}
	}
}

C++: #include<iostream>
using namespace std;

int main(){

	for(int i=1; i<=9; i++){
		cout << i << "x" << i << "=" << i*i << "\n";
	}

    return 0;
}

C++: #include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<set>
#define MAXN 35
using namespace std;
/*int a[MAXN];
 bool vis[MAXN];
 int n, m, ans;
 void DFS(int st, int sum) {
 if (sum > m)
 return;
 if (ans == m)
 return;
 ans = max(ans, sum);
 int i;
 for (i = st; i < n; i++) {
 if (i > 0 && a[i] == a[i - 1] && !vis[i - 1])
 continue;
 vis[i] = true;
 DFS(i + 1, sum + a[i]);
 vis[i] = false;
 }
 }
 int main() {
 int i, s;
 while (~scanf("%d%d", &n, &m)) {
 for (s = ans = i = 0; i < n; i++) {
 scanf("%d", &a[i]);
 s += a[i];
 }
 if (s <= m) {
 printf("%d\n", s);
 continue;
 }
 sort(a, a + n);
 memset(vis, false, sizeof(vis));
 DFS(0, 0);
 printf("%d\n", ans);
 }
 return 0;
 }*/
/*
 30 10000000
 200000 300000 400000 500000 600600
 700000 80000 90000 10000 207000
 203000 220000 200000 1200000 200600
 204000 200004 520000 320000 200000
 200000 200000 200000 420000 200800
 200050 200700 2030000 520000 200080
 */
int n, m;
int a[MAXN];
set<int> myset[MAXN];
vector<int> dp[MAXN][MAXN];
void Clear() {
	int i, j;
	for (i = 0; i < MAXN; i++) {
		myset[i].clear();
		for (j = 0; j < MAXN; j++)
			dp[i][j].clear();
	}
}
int main() {
	int i, j, k, ans;
	while (~scanf("%d%d", &n, &m)) {
		Clear();
		for (i = 1; i <= n; i++)
			scanf("%d", &a[i]);
		dp[0][0].push_back(0);
		for (i = 1; i <= n; i++) {
			for (j = 1; j <= i; j++) {
				if (i - 1 >= j) {
					for (k = 0; k < dp[i - 1][j].size(); k++) {
						if (!myset[i].count(dp[i - 1][j][k])) {
							myset[i].insert(dp[i - 1][j][k]);
							dp[i][j].push_back(dp[i - 1][j][k]);
						}
					}
				}
				for (k = 0; k < dp[i - 1][j - 1].size(); k++) {
					if (dp[i - 1][j - 1][k] + a[i] <= m && !myset[i].count(dp[i
							- 1][j - 1][k] + a[i])) {
						myset[i].insert(dp[i - 1][j - 1][k] + a[i]);
						dp[i][j].push_back(dp[i - 1][j - 1][k] + a[i]);
					}
				}
			}
		}
		for (ans = i = 0; i <= n; i++) {
			for (j = 0; j <= i; j++) {
				for (k = 0; k < dp[i][j].size(); k++)
					ans = max(ans, dp[i][j][k]);
			}
		}
		printf("%d\n", ans);
	}
	return 0;
}