#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define FOR(i,a,b) for (int i = (a); i < (b); ++i) #define FOR2(i,a,b) for (int i = (a); i > (b); --i) /* #define FOR(i,n) for(int i=0; i < (n); i++) #define FORD(i,n) for(int i=(n)-1; i >= 0; i--) #define FORTO(i,a,b) for (int i = (a); i <= (b); ++i) */ #define DEBUG(x) cout << '>' << #x << ' ' << x << endl; #define SIZE(x) int(x.size()) typedef pair PII; typedef long long ll; void print(const vector & a) { if (a.empty()) printf("0"); else { FOR2(i, a.size()-1, -1) printf("%d", a[i]); } } void add(vector & a, const vector & b) { int carry = 0; FOR(i, 0, b.size()) { if (i == a.size()) a.push_back(0); a[i] += b[i] + carry; carry = a[i] / 10; a[i] %= 10; } int index = b.size(); while (carry) { if (index == a.size()) a.push_back(0); a[index] += carry; carry = a[index] / 10; a[index] %= 10; ++index; } } int N, L, B, F; vector graph[1000]; int state[1000]; vector dp[1000][1000]; bool visited[1000][1000]; void go(int node, int len) { if (visited[node][len]) return; visited[node][len] = true; if (state[node] == -1 && len) return; if (len == 0) { //len ak je koncovy if (state[node] == -1) dp[node][len].push_back(1); return; } FOR(i, 0, graph[node].size()) { go(graph[node][i], len-1); add(dp[node][len], dp[graph[node][i]][len-1]); } } int main() { while (1) { scanf("%d%d%d%d", &N, &L, &B, &F); if (!N) break; FOR(i, 0, N) graph[i].clear(); FOR(i, 0, N) state[i] = 0; FOR(i, 0, N) { int node, M, next; scanf("%d%d", &node, &M); FOR(j, 0, M) { scanf("%d", &next); graph[node-1].push_back(next-1); } } int temp; FOR(i, 0, B) { scanf("%d", &temp); state[temp-1] = 1; } FOR(i, 0, F) { scanf("%d", &temp); state[temp-1] = -1; } if (L > N) { printf("impossible\n"); continue; } //neda sa FOR(i, 0, N) FOR(j, 0, L) { visited[i][j] = false; dp[i][j].clear(); } vector res; FOR(i, 0, N) if (state[i] == 1) { go(i, L-1); add(res, dp[i][L-1]); } if (res.empty()) printf("impossible\n"); else { print(res); printf("\n"); } } return 0; }