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

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];

		auto sorted = array(uniq(sort(add2)));	
		auto r = assumeSorted(sorted);

		int res;
		foreach(v; sorted)
		{
			if(v > M) break;
			res = max(res, v + r.lowerBound(M-v).back);
		}

		writeln(res);
	}
}