<pre>#include&lt;iostream&gt;

#include&lt;algorithm&gt;
#include&lt;vector&gt;
#include&lt;queue&gt;
#include&lt;stack&gt;
#include&lt;list&gt;
#include&lt;map&gt;
#include&lt;set&gt;

#include&lt;stdio.h&gt;
#include&lt;math.h&gt;
#include&lt;ctype.h&gt;
#include&lt;string.h&gt;

using namespace std;

#define FOR(i,a,b) for(int i=a;i&lt;=b;i++)
#define PB push_back
#define PII pair&lt;int, int&gt;
#define fi first
#define se second;iiiisaas
#define MP make_pair

#define SIZE(s) ((int)(s).size())

#define MAX 2047

#define ll long long

int D[5][MAX];
int L, N[5];

vector&lt;ll&gt; K[3];

int find(int a)
{
//	if (a &lt; 0 ) return 0;
	int idx = upper_bound(K[1].begin(), K[1].end(), a) - K[1].begin();
	return idx;
}

int main()
{
	while(true)
	{
		scanf(&quot;%d %d %d %d %d&quot;, &amp;L, N, N+1, N+2, N+3);
		if (L + N[0] + N[1] + N[2] + N[3] == 0) return 0;
		FOR(n,0,3)
		{
			FOR(i,0,N[n]-1) scanf(&quot;%d&quot;, &amp;D[n][i]);
		}

		
		FOR(i,0,1) K[i].clear();


		FOR(i,0,N[0]-1)
			FOR(j,0,N[1]-1)
			{
				K[0].PB( (ll)( D[0][i]+D[1][j] ) );
			}
		FOR(i,0,N[2]-1)
			FOR(j,0,N[3]-1)
			{
				K[1].PB( (ll) (D[2][i]+D[3][j]) );
			}

		sort(K[0].begin(), K[0].end());
		sort(K[1].begin(), K[1].end());

		//FOR(i,0,SIZE(K[0])-1) printf(&quot;%d &quot;, K[0][i]); printf(&quot;\n&quot;);
		//FOR(i,0,SIZE(K[1])-1) printf(&quot;%d &quot;, K[1][i]); printf(&quot;\n&quot;);

		ll sum = 0;
		FOR(i,0,SIZE(K[0])-1)
		{
			int k = find( (ll)L - K[0][i]);
		//	printf(&quot;Hladam: %d = %d\n&quot;,  L - K[0][i], k);
			sum+= (ll) k;
		}

		printf(&quot;%lld\n&quot;, sum);
	}
	return 0;
}

</pre>
