#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
int a[40];
int book[40];
int n,T,sum,count;
void DFS(int k);
int main()
{
	int i,j;
	cin>>n;
	for(i=0;i<n;i++)
	cin>>a[i];
	cin>>T;
	sum=0;
	count=0;
	memset(book,0,sizeof(book));
	DFS(n-1);        //按题目要求的输出顺序,从后往前搜索 
	printf("%d\n",count);
	return 0;
}
 
void DFS(int k)
{
	int i,j,flag=0;
	if(k<0)
	{
		sum=0;
		for(i=0;i<n;i++)
		{
			if(book[i]==1)
			{
				flag=1;
				sum+=a[i];
			}
		}
		if(sum==T && flag)  //flag是为了判断这n个数是不是全没被选中,全没被选中是不允许的。 
		{
			count++;
			for(i=0;i<n;i++)
			{
				if(book[i]==1)
				printf("%d ",a[i]);
			}
			printf("\n");
		}
		return ;
	}
	book[k]=0;
	DFS(k-1);
	book[k]=1;
	DFS(k-1);
}
/**************************************************************
	Problem: 1850
	User: admin
	Language: C++
	Result: Accepted
	Time:1054 ms
	Memory:2076 kb
****************************************************************/