#include <bits/stdc++.h>
using namespace std;
int s;
pair<int, int> vis[100001];
int vis2[100001];
vector<int> a[100001];
vector<int> cycle_points;
bool winner = false;
pair<int, int> par[100001];
unordered_map<int, bool> bolo;
stack<int> trace;
bool visited[100001];
bool recStack[100001];
class Graph {
  int V;
  list<int> *adj;
  bool isCyclicUtil(int v);

 public:
  Graph(int V);
  void addEdge(int v, int w);
  bool isCyclic();
};
Graph::Graph(int V) {
  this->V = V;
  adj = new list<int>[V];
}
void Graph::addEdge(int v, int w) { adj[v].push_back(w); }
bool Graph::isCyclicUtil(int v) {
  if (visited[v] == false) {
    visited[v] = true;
    recStack[v] = true;
    list<int>::iterator i;
    for (i = adj[v].begin(); i != adj[v].end(); ++i) {
      if (!visited[*i] && isCyclicUtil(*i))
        return true;
      else if (recStack[*i])
        return true;
    }
  }
  recStack[v] = false;
  return false;
}
bool Graph::isCyclic() {
  for (int i = 0; i < V; i++) {
    visited[i] = false;
    recStack[i] = false;
  }
  for (int i = 0; i < V; i++)
    if (isCyclicUtil(i)) return true;
  return false;
}
int i = 1;
queue<int> qu;
void dfs(int x) {
  qu.push(x);
  while (!qu.empty()) {
    int x = qu.front();
    qu.pop();
    if (a[x].size() == 0) {
      bolo[x] = true;
    }
    for (int k = 0; k < a[x].size(); k++) {
      if (vis2[a[x][k]] == 0) {
        vis2[a[x][k]] = 1;
        qu.push(a[x][k]);
      }
    }
  }
}
bool shav = false;
void w(int x, short col) {
  for (int k = 0; k < a[x].size(); k++) {
    if (shav) return;
    if (col == 1) {
      if (vis[a[x][k]].second == 0) {
        vis[a[x][k]].second = 1;
        par[a[x][k]].second = x;
        if (a[a[x][k]].size() == 0) {
          shav = true;
          int la = a[x][k];
          int c = 2;
          winner = true;
          while (1) {
            trace.push(la);
            if (c == 1) {
              la = par[la].first;
              c = 2;
            } else {
              c = 1;
              la = par[la].second;
            }
            if (la == s && c == 1) {
              trace.push(s);
              return;
            }
          }
        }
        w(a[x][k], 2);
      }
    } else {
      if (vis[a[x][k]].first == 0) {
        par[a[x][k]].first = x;
        vis[a[x][k]].first = 1;
        w(a[x][k], 1);
      }
    }
  }
}
Graph g(100001);
void q(int x) {
  for (int k = 0; k < a[x].size(); k++) {
    if (vis2[a[x][k]] == 0) {
      vis2[a[x][k]] = 1;
      g.addEdge(x, a[x][k]);
      q(a[x][k]);
    } else {
      g.addEdge(x, a[x][k]);
    }
  }
}
int main() {
  int n, m;
  cin >> n >> m;
  int x;
  int p;
  for (int k = 0; k < n; k++) {
    cin >> x;
    for (int j = 0; j < x; j++) {
      cin >> p;
      a[k + 1].push_back(p);
    }
  };
  cin >> s;
  vis2[s] = 1;
  dfs(s);
  vis[s].first = 1;
  w(s, 1);
  memset(vis2, 0, (n + 1) * sizeof(int));
  vis2[s] = 1;
  q(s);
  if (winner) {
    cout << "Win" << endl;
    while (!trace.empty()) {
      cout << trace.top() << " ";
      trace.pop();
    }
    return 0;
  }
  if (g.isCyclic()) {
    cout << "Draw";
    return 0;
  }
  cout << "Lose";
  return 0;
}
