#include <bits/stdc++.h>
using namespace std;
const int N=105;
int n,m,s,cnt=0;//cnt记录符合要求的序列数
struct Node{
int weight;
vector<int> child; //孩子数量
}node[N];
string ans[N];//存放满足要求的序列
bool cmp(string a,string b){
return a>b;
}
void dfs(int root,int sum,string sq){
sum+=node[root].weight;
sq+=to_string(node[root].weight)+" ";
vector<int> vi=node[root].child;
if(vi.empty()&&sum==s){
ans[cnt++]=sq;
}
for(int i=0;i<vi.size();i++){
dfs(vi[i],sum,sq);
}
}
int main(){
scanf("%d%d%d",&n,&m,&s);
for(int i=0;i<n;i++){
scanf("%d",&node[i].weight);
}
for(int i=0;i<m;i++){
int x,k;
scanf("%d%d",&x,&k);
while(k--){
int j;
scanf("%d",&j);
node[x].child.push_back(j);
}
}
dfs(0,0,"");
sort(ans,ans+cnt,cmp);
for(int i=0;i<cnt;i++){
if(ans[i]!=""){
ans[i].erase(ans[i].end()-1);
printf("%s\n",ans[i].data());
}
}
return 0;
}
求解!