import std.array;
import std.range;
import std.stdio;
import std.conv;
import std.string;
import std.algorithm;

int bsearch(int[] a, int b) {
    int lo=0,hi=a.length-1;
    while(hi>=lo) {
    	int mi = (hi+lo)/2;

	if(a[mi] > b) hi = mi - 1;
	else lo = mi + 1;
    }

    return a[hi];
} 
 
void main()
{
    while(true) {
        string[] input = split(chomp(readln()));   
        int N = to!int(input[0]);
        int M = to!int(input[1]);
        if(N==0&&M==0) break;
         
 
        int[] inp = new int[N+1];
        inp[0] = 0;
 
        for(int i=0; i<N; i++) {
            input = split(chomp(readln()));
            inp[i+1] = to!int(input[0]);
        }
 
        N++;
 
        int[] add2 = new int[N*N];
 
        for(int i=0; i<N; i++)
        for(int j=0; j<N; j++)
            add2[j*N + i] =  inp[i] + inp[j];
     
        add2.sort.uniq;

        int res;
        foreach(v; add2)
        {
            if(v > M) break;
 
            res = max(res, v + bsearch(add2, M-v));
        }
 
        writeln(res);
      }
}