// ROOT : DRAGON3012009
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define el "\n"
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define __ROOT__ int main()
#pragma GCC optimize("O2")
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define fi first
#define se second
#define M 1000000007
#define MAXN 201
#define INF (1ll<<60)
#define BLOCK_SIZE 425
#define MAX_NODE 1001001
#define LOG 19
#define ALPHA_SIZE 26
#define BASE 311
#define NAME "file"
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
using namespace std;
const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll) 1e9 + 7 };
const ll NMOD = 1;
const int dx[] = {-1, 0, 1,0};
const int dy[] = {0, 1, 0, -1};
//**Variable**//
ll n, m, p, k ;
ll arr[MAXN];
ll d[MAXN][(1<<13)+1] ;
vector<ll> kiem[MAXN];
//**Struct**//
struct Edge {
ll v,w ;
vector<ll> dragon ;
Edge(ll a,ll b, vector<ll> temp ) {
v = a;
w = b ;
dragon = temp ;
}
};
vector<Edge>adj[MAXN] ;
struct Data {
ll u,w, mask ;
bool operator < (const Data & other) const {
return w > other.w;
}
};
//**Function**//
template<class X, class Y >
bool minimize(X & x, const Y &y ) {
return x > y ? x = y, 1:0 ;
}
template<class X, class Y >
bool maximize(X &x, const Y &y ) {
return x < y ? x = y, 1:0 ;
}
bool check(ll mask1, ll mask2 ) {
FOR(i, 0, p -1 ) {
if(mask2 >> i & 1 ) {
if(!( mask1>> i &1) ) return false;
}
}
return true;
}
void init() {
cin>>n>>m >> p >> k ; // lần lượt là số thành phố, số con đường, số loại rồng và số thợ rèn
FOR(i, 1, k ) {
ll pos, cnt ;
cin>> pos >> cnt ;
FOR(j, 1, cnt ) {
ll x;
cin >>x ;
kiem[pos].push_back(x- 1 ) ;
}
}
FOR(i, 1,m) {
ll x, y, w, cnt ;
cin >> x>> y >> w >> cnt ;
vector<ll>temp ;
FOR(j, 1, cnt ) {
ll t;
cin >> t;
temp.push_back(t-1) ;
}
adj[x].push_back(Edge(y, w,temp)) ;
adj[y].push_back(Edge(x, w,temp)) ;
}
}
void dijkstra(ll start ) {
FOR(i, 0, n ) FOR(mask, 0, (1<<p) - 1 ) d[i][mask] = INF ;
ll temp_mask = 0 ;
for(ll cur : kiem[start]) temp_mask |= (1 << cur) ;
d[start][temp_mask] = 0 ;
priority_queue<Data>pq ;
pq.push({start, 0, temp_mask}) ;
while(!pq.empty()) {
Data u = pq.top() ;
pq.pop() ;
if(d[u.u][u.mask] < u.w ) continue ;
for(Edge v : adj[u.u]) {
ll need_mask = 0 , new_mask = 0 ;
for(ll it: v.dragon) need_mask |= (1<< it);
if(!check(u.mask , need_mask )) continue;
for(ll it : kiem[v.v]) new_mask |= (1<< it ) ;
new_mask |= u.mask ;
if(d[v.v][new_mask] > v.w + u.w) {
pq.push({v.v , d[v.v][new_mask] = v.w + u.w , new_mask }) ;
}
}
}
}
void solve() {
dijkstra(1);
ll ans = INF ;
FOR(mask, 0, (1<<p)-1 ) minimize(ans,d[n][mask]) ;
cout << (ans == INF ? -1 : ans ) ;
}
__ROOT__ {
// freopen(NAME".inp" , "r" , stdin);
// freopen(NAME".out" , "w", stdout) ;
fast;
int t =1 ;// cin >> t;
while(t-- ) {
init();
solve();
}
}
Ly8gUk9PVCA6IERSQUdPTjMwMTIwMDkKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBlbCAiXG4iCiNkZWZpbmUgZmFzdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKI2RlZmluZSBfX1JPT1RfXyBpbnQgbWFpbigpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJPMiIpCiNkZWZpbmUgRk9SKGksbCxyKSBmb3IoaW50IGkgPSBsIDsgaSA8PSByIDsgaSArKykKI2RlZmluZSBGT1JEKGkscixsKSBmb3IoaW50IGkgPSByIDsgaSA+PSBsIDsgaSAtLSkKI2RlZmluZSBSRVAoaSwgYSApIGZvcihpbnQgaSA9IDAgOyBpIDwgYSA7IGkgKysgKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgTSAxMDAwMDAwMDA3CiNkZWZpbmUgTUFYTiAyMDEKI2RlZmluZSBJTkYgKDFsbDw8NjApCiNkZWZpbmUgQkxPQ0tfU0laRSA0MjUKI2RlZmluZSBNQVhfTk9ERSAxMDAxMDAxCiNkZWZpbmUgTE9HIDE5CiNkZWZpbmUgQUxQSEFfU0laRSAyNgojZGVmaW5lIEJBU0UgMzExCiNkZWZpbmUgTkFNRSAiZmlsZSIKI2RlZmluZSBjb21wYXJlKHYpIHNvcnQoKHYpLmJlZ2luKCksICh2KS5lbmQoKSk7ICh2KS5lcmFzZSh1bmlxdWUoKHYpLmJlZ2luKCksICh2KS5lbmQoKSksICh2KS5lbmQoKSk7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGxsIE1PRFtdID0geyhsbCkxZTkgKyAyMjc3LCAobGwpMWU5ICsgNTI3NywgKGxsKTFlOSArIDgyNzcsIChsbCkxZTkgKyA5Mjc3LCAobGwpIDFlOSArIDcgfTsKY29uc3QgbGwgTk1PRCA9IDE7CmNvbnN0IGludCBkeFtdID0gey0xLCAwLCAxLDB9Owpjb25zdCBpbnQgZHlbXSA9IHswLCAxLCAwLCAtMX07Ci8vKipWYXJpYWJsZSoqLy8KbGwgbiwgbSwgcCwgayAgIDsKbGwgYXJyW01BWE5dOwpsbCBkW01BWE5dWygxPDwxMykrMV0gOwp2ZWN0b3I8bGw+IGtpZW1bTUFYTl07Ci8vKipTdHJ1Y3QqKi8vCnN0cnVjdCBFZGdlIHsKICAgIGxsIHYsdyA7CiAgICB2ZWN0b3I8bGw+IGRyYWdvbiA7CiAgICBFZGdlKGxsIGEsbGwgYiwgdmVjdG9yPGxsPiB0ZW1wICkgewogICAgICAgIHYgPSBhOwogICAgICAgIHcgPSBiIDsKICAgICAgICBkcmFnb24gPSB0ZW1wIDsKICAgIH0KfTsKdmVjdG9yPEVkZ2U+YWRqW01BWE5dIDsKc3RydWN0IERhdGEgewogICAgbGwgdSx3LCBtYXNrIDsKICAgIGJvb2wgb3BlcmF0b3IgPCAoY29uc3QgRGF0YSAmIG90aGVyKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHcgPiBvdGhlci53OwogICAgfQp9OwovLyoqRnVuY3Rpb24qKi8vCnRlbXBsYXRlPGNsYXNzIFgsIGNsYXNzIFkgPgpib29sIG1pbmltaXplKFggJiB4LCBjb25zdCBZICZ5ICkgewogICAgcmV0dXJuIHggPiB5ID8geCA9IHksIDE6MCA7Cn0KdGVtcGxhdGU8Y2xhc3MgWCwgY2xhc3MgWSA+CmJvb2wgbWF4aW1pemUoWCAmeCwgY29uc3QgWSAmeSApIHsKICAgIHJldHVybiB4IDwgeSA/IHggPSB5LCAxOjAgOwp9CmJvb2wgY2hlY2sobGwgbWFzazEsIGxsIG1hc2syICkgewogICAgRk9SKGksIDAsIHAgLTEgKSB7CiAgICAgICAgaWYobWFzazIgPj4gaSAmIDEgKSB7CiAgICAgICAgICAgIGlmKCEoIG1hc2sxPj4gaSAmMSkgKSByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn0Kdm9pZCBpbml0KCkgewogICAgY2luPj5uPj5tID4+IHAgPj4gayA7IC8vIGzhuqduIGzGsOG7o3QgbMOgIHPhu5EgdGjDoG5oIHBo4buRLCBz4buRIGNvbiDEkcaw4budbmcsIHPhu5EgbG/huqFpIHLhu5NuZyB2w6Agc+G7kSB0aOG7oyByw6huCiAgICBGT1IoaSwgMSwgayApIHsKICAgICAgICBsbCBwb3MsIGNudCA7CiAgICAgICAgY2luPj4gcG9zID4+IGNudCA7CiAgICAgICAgRk9SKGosIDEsIGNudCApIHsKICAgICAgICAgICAgbGwgeDsKICAgICAgICAgICAgY2luID4+eCA7CiAgICAgICAgICAgIGtpZW1bcG9zXS5wdXNoX2JhY2soeC0gMSApIDsKICAgICAgICB9CiAgICB9CiAgICBGT1IoaSwgMSxtKSB7CiAgICAgICAgbGwgeCwgeSwgdywgIGNudCA7CiAgICAgICAgY2luID4+IHg+PiB5ID4+IHcgPj4gY250IDsKICAgICAgICB2ZWN0b3I8bGw+dGVtcCA7CiAgICAgICAgRk9SKGosIDEsIGNudCAgKSB7CiAgICAgICAgICAgIGxsIHQ7CiAgICAgICAgICAgIGNpbiA+PiB0OwogICAgICAgICAgICB0ZW1wLnB1c2hfYmFjayh0LTEpIDsKICAgICAgICB9CiAgICAgICAgYWRqW3hdLnB1c2hfYmFjayhFZGdlKHksIHcsdGVtcCkpIDsKICAgICAgICBhZGpbeV0ucHVzaF9iYWNrKEVkZ2UoeCwgdyx0ZW1wKSkgOwogICAgfQp9CnZvaWQgZGlqa3N0cmEobGwgc3RhcnQgKSB7CiAgICBGT1IoaSwgMCwgbiApIEZPUihtYXNrLCAwLCAoMTw8cCkgLSAxICkgZFtpXVttYXNrXSA9IElORiA7CiAgICBsbCB0ZW1wX21hc2sgPSAwIDsKICAgIGZvcihsbCBjdXIgOiBraWVtW3N0YXJ0XSkgdGVtcF9tYXNrIHw9ICgxIDw8IGN1cikgOwogICAgZFtzdGFydF1bdGVtcF9tYXNrXSA9IDAgOwogICAgcHJpb3JpdHlfcXVldWU8RGF0YT5wcSA7CiAgICBwcS5wdXNoKHtzdGFydCwgIDAsIHRlbXBfbWFza30pIDsKICAgIHdoaWxlKCFwcS5lbXB0eSgpKSB7CiAgICAgICAgRGF0YSB1ID0gcHEudG9wKCkgOwogICAgICAgIHBxLnBvcCgpIDsKICAgICAgICBpZihkW3UudV1bdS5tYXNrXSA8IHUudyApIGNvbnRpbnVlIDsKICAgICAgICBmb3IoRWRnZSB2IDogYWRqW3UudV0pIHsKICAgICAgICAgICAgbGwgbmVlZF9tYXNrID0gMCAsIG5ld19tYXNrID0gMCAgOwogICAgICAgICAgICBmb3IobGwgaXQ6IHYuZHJhZ29uKSBuZWVkX21hc2sgfD0gKDE8PCBpdCk7CiAgICAgICAgICAgIGlmKCFjaGVjayh1Lm1hc2sgLCBuZWVkX21hc2sgKSkgY29udGludWU7CiAgICAgICAgICAgICBmb3IobGwgaXQgOiBraWVtW3Yudl0pIG5ld19tYXNrIHw9ICgxPDwgaXQgKSA7CiAgICAgICAgICAgICBuZXdfbWFzayB8PSB1Lm1hc2sgOwogICAgICAgICAgICAgaWYoZFt2LnZdW25ld19tYXNrXSA+IHYudyArIHUudykgewogICAgICAgICAgICAgICAgcHEucHVzaCh7di52ICwgZFt2LnZdW25ld19tYXNrXSA9IHYudyArIHUudyAsIG5ld19tYXNrIH0pIDsKICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0Kdm9pZCBzb2x2ZSgpIHsKICAgIGRpamtzdHJhKDEpOwogICAgbGwgYW5zID0gSU5GIDsKICAgIEZPUihtYXNrLCAwLCAoMTw8cCktMSApIG1pbmltaXplKGFucyxkW25dW21hc2tdKSA7CiAgICBjb3V0IDw8IChhbnMgPT0gSU5GID8gLTEgOiBhbnMgKSA7Cn0KCl9fUk9PVF9fIHsKLy8gICAgIGZyZW9wZW4oTkFNRSIuaW5wIiAsICJyIiAsIHN0ZGluKTsKLy8gICAgIGZyZW9wZW4oTkFNRSIub3V0IiAsICJ3Iiwgc3Rkb3V0KSA7CiAgICBmYXN0OwogICAgaW50IHQgPTEgOy8vICAgIGNpbiA+PiB0OwogICAgd2hpbGUodC0tICkgewogICAgICAgIGluaXQoKTsKICAgICAgICBzb2x2ZSgpOwogICAgfQp9CgoKCg==