#include<iostream>
#include<algorithm>
#include<cstring>
#include<deque>
using namespace std;
const int N=30;
int stand[N];
int st[N];
int sl[N][N];
int temp[N];
int n,m;
deque<int> dq;
bool dfs(int now,int tag)
{
if(now==tag)
{
bool flag=true;
for(int i=0;i<m;i++)
{
if(temp[i]<stand[i])
{
flag=false;
break;
}
}
return flag;
}
for(int i=0;i<n;i++)
{
if(!st[i])
{
st[i]=true;
dq.push_back(i+1);
for(int j=0;j<m;j++)
{
temp[j]+=sl[i][j];
}
if(dfs(now+1,tag))
return true;
for(int j=0;j<m;j++)
{
temp[j]-=sl[i][j];
}
dq.pop_back();
st[i]=false;
}
}
return false;
}
int main()
{
cin>>m;
for(int i=0;i<m;i++)
cin>>stand[i];
cin>>n;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>sl[i][j];
}
}
for(int i=1;i<=n;i++)
{
memset(temp,0,sizeof temp);
memset(st,false,sizeof st);
dq.clear();
if(dfs(0,i))
{
cout<<i<<" ";
while(!dq.empty())
{
cout<<dq.front()<<" ";
dq.pop_front();
}
break;
}
}
return 0;
}