#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 9;
const long long inf = 1e17;
int n, m, k, s1, s2, t, Draw, Win, c[N];
long long dist[N];
pair<int, pair<int, int> > par[N];
vector<pair<pair<int, int>, int> > fixedge;
vector<pair<int, pair<int, int> > > g[N], G[N];
pair<pair<int, int>, pair<int, int> > e, Edge[N];
map<pair<pair<int, int>, pair<int, int> >, int> ans;
vector<pair<pair<int, int>, pair<int, int> > > edge;
map<pair<pair<int, int>, pair<int, int> >, bool> mark;
pair<pair<int, int>, pair<int, int> > Srt(
    pair<pair<int, int>, pair<int, int> > p) {
  if (p.second.second < p.second.first) swap(p.second.first, p.second.second);
  return p;
}
void output() {
  if (dist[s1] < dist[s2]) cout << "WIN";
  if (dist[s1] == dist[s2]) cout << "DRAW";
  if (dist[s2] < dist[s1]) cout << "LOSE";
  cout << '\n';
  if (dist[s1] <= dist[s2])
    for (int i = 0; i < k; i++)
      cout << (mark[Edge[i]] ? Edge[i].second.first : Edge[i].second.second)
           << " ";
  exit(0);
}
void make_graph() {
  for (int i = 1; i < n + 1; i++) g[i].clear();
  for (int i = 0; i < edge.size(); i++) {
    int u = edge[i].first.first, v = edge[i].first.second,
        l = edge[i].second.first, r = edge[i].second.second;
    if (mark[edge[i]])
      g[v].push_back(make_pair(u, make_pair(l, r)));
    else
      g[v].push_back(make_pair(u, make_pair(r, l)));
  }
  for (int i = 0; i < fixedge.size(); i++) {
    int u = fixedge[i].first.first, v = fixedge[i].first.second,
        w = fixedge[i].second;
    g[v].push_back(make_pair(u, make_pair(w, 0)));
  }
}
void dfs1(int x, pair<pair<int, int>, pair<int, int> > p) {
  c[x] = 0;
  if (x == s1) c[x] = 1;
  for (int i = 0; i < G[x].size(); i++) {
    dfs1(G[x][i].first, make_pair(make_pair(G[x][i].first, x), G[x][i].second));
    c[x] |= c[G[x][i].first];
  }
  if (c[x] && p.second.second) mark[Srt(p)] = 1;
}
void dfs2(int x, pair<pair<int, int>, pair<int, int> > p) {
  c[x] = 0;
  if (x == s1) c[x] = 1;
  if (x == s2) c[x] = 2;
  for (int i = 0; i < G[x].size(); i++) {
    dfs2(G[x][i].first, make_pair(make_pair(G[x][i].first, x), G[x][i].second));
    c[x] |= c[G[x][i].first];
  }
  if (c[x] == 3 && p.second.second && e.second.second == 0) e = Srt(p);
}
void reset_mark(int s) {
  mark.clear();
  for (int i = 0; i < edge.size(); i++) mark[edge[i]] = s;
}
void dijkstra_tree() {
  for (int i = 1; i < n + 1; i++) G[i].clear();
  set<pair<long long, int> > s;
  fill(dist, dist + N, inf);
  dist[t] = 0;
  for (int i = 1; i < n + 1; i++) s.insert(make_pair(dist[i], i));
  while (s.size()) {
    int u = (*s.begin()).second;
    s.erase(*s.begin());
    if (dist[u] == inf) return;
    if (u != t) G[par[u].first].push_back(make_pair(u, par[u].second));
    for (int i = 0; i < g[u].size(); i++) {
      int v = g[u][i].first;
      if (dist[u] + g[u][i].second.first < dist[v]) {
        s.erase(make_pair(dist[v], v));
        dist[v] = dist[u] + g[u][i].second.first;
        s.insert(make_pair(dist[v], v));
        par[v] = make_pair(
            u, make_pair(g[u][i].second.first, g[u][i].second.second));
      }
    }
  }
}
void do_it() {
  e = make_pair(make_pair(0, 0), make_pair(0, 0));
  reset_mark(1);
  make_graph();
  dijkstra_tree();
  reset_mark(0);
  dfs1(t, make_pair(make_pair(0, 0), make_pair(0, 0)));
  make_graph();
  dijkstra_tree();
  dfs2(t, make_pair(make_pair(0, 0), make_pair(0, 0)));
  if (e.second.second == 0 || dist[s1] < dist[s2]) output();
  for (int i = 0; i < edge.size(); i++)
    if (edge[i] == e) {
      edge.erase(edge.begin() + i);
      fixedge.push_back(
          make_pair(make_pair(e.first.first, e.first.second), e.second.second));
      break;
    }
}
int main() {
  cin >> n >> m >> k;
  cin >> s1 >> s2 >> t;
  for (int i = 0; i < m; i++) {
    int u, v, w;
    cin >> u >> v >> w;
    if (u != v) fixedge.push_back(make_pair(make_pair(u, v), w));
  }
  for (int i = 0; i < k; i++) {
    int u, v, l, r;
    cin >> u >> v >> l >> r;
    if (u != v) edge.push_back(make_pair(make_pair(u, v), make_pair(l, r)));
    Edge[i] = (make_pair(make_pair(u, v), make_pair(l, r)));
  }
  for (int i = 0; i < k + 1; i++) do_it();
}
