#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
int const N = 2e4 + 20, inf = 1e18;
int n, m, k, s1, s2, f, dist[N], mark[N];
vector<int> g[N];
struct edge {
  int u, v, l, r, w;
} e[N];
inline bool dijk(bool b) {
  fill(dist, dist + n, inf);
  memset(mark, 0, sizeof mark);
  dist[s1] = 0, mark[s1] = 1, dist[s2] = 0, mark[s2] = 2;
  set<pii> st;
  st.insert({0, s1}), st.insert({0, s2});
  while (!st.empty()) {
    int v = st.begin()->second;
    st.erase(st.begin());
    if (mark[v] == 1 || (mark[v] == 3 && b))
      for (int ed : g[v]) e[ed].w = e[ed].l;
    else
      for (int ed : g[v]) e[ed].w = e[ed].r;
    for (int ed : g[v]) {
      int u = e[ed].v, w = e[ed].w;
      if (dist[v] + w == dist[u] && mark[u] != mark[v]) mark[u] = 3;
      if (dist[v] + w < dist[u]) {
        st.erase({dist[u], u});
        dist[u] = dist[v] + w, mark[u] = mark[v];
        st.insert({dist[u], u});
      }
    }
  }
  return mark[f] == 1 || (mark[f] == 3 && b);
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> k;
  cin >> s1 >> s2 >> f;
  s1--, s2--, f--;
  for (int i = 0; i < m + k; i++) {
    cin >> e[i].u >> e[i].v >> e[i].l;
    e[i].r = e[i].w = e[i].l, e[i].u--, e[i].v--;
    if (i >= m) cin >> e[i].r;
    g[e[i].u].push_back(i);
  }
  if (dijk(0)) {
    cout << "WIN\n";
    for (int i = m; i < m + k; i++) cout << e[i].w << ' ';
    cout << '\n';
    return 0;
  }
  if (dijk(1) || s1 == s2) {
    cout << "DRAW\n";
    for (int i = m; i < m + k; i++) cout << e[i].w << ' ';
    cout << '\n';
    return 0;
  }
  cout << "LOSE\n";
}
