#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5;
bool target[MAXN + 5];
bool vis[MAXN + 5][2];
int dad[MAXN + 5][2];
vector<int> G[MAXN + 5];
int n, m;
bool hasCycles = false;
int start;
vector<int> constructPath(int node, bool parity) {
  vector<int> ret;
  ret.push_back(node);
  for (int u = node; ~dad[u][parity]; u = dad[u][parity], parity = !parity)
    ret.push_back(dad[u][parity]);
  reverse(ret.begin(), ret.end());
  assert(ret[0] == start);
  return ret;
}
void dfs(int u, bool parity, int p = -1) {
  if (vis[u][parity]) {
    hasCycles = true;
    return;
  }
  dad[u][parity] = p;
  vis[u][parity] = true;
  if (target[u] && parity) {
    vector<int> path = constructPath(u, parity);
    printf("Win\n");
    for (int c = 0; c < (int)path.size(); c++) {
      if (c) printf(" ");
      printf("%d", path[c] + 1);
    }
    printf("\n");
    exit(0);
  }
  for (int v : G[u]) dfs(v, !parity, u);
}
const int GRAY = 1;
const int BLACK = 2;
int color[MAXN + 5];
bool checkCycles(int u) {
  if (color[u] == GRAY) return true;
  if (color[u] == BLACK) return false;
  color[u] = GRAY;
  for (int v : G[u])
    if (checkCycles(v)) return true;
  color[u] = BLACK;
  return false;
}
int main() {
  int c, c2;
  scanf("%d%d", &n, &m);
  for (c = 0; c < n; c++) {
    int sz;
    scanf("%d", &sz);
    target[c] = !sz;
    for (c2 = 0; c2 < sz; c2++) {
      int v;
      scanf("%d", &v);
      v--;
      G[c].push_back(v);
    }
  }
  memset(dad, -1, sizeof(dad));
  scanf("%d", &start);
  start--;
  dfs(start, false);
  if (checkCycles(start))
    printf("Draw\n");
  else
    printf("Lose\n");
}
