#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5;
const int inf = 1e9;
int n, m, k, s1, s2, f;
struct Edge {
  int u, v, l, r;
};
pair<int, int> edge[maxn];
Edge spelEdge[maxn];
vector<int> G[maxn];
long long dp_s1[maxn], dp_s2[maxn];
bool mark[maxn];
void dijkstra_s1() {
  set<pair<long long, int>> S;
  S.insert({0, s1});
  memset(dp_s1, 127, sizeof dp_s1);
  dp_s1[s1] = 0;
  while (!S.empty()) {
    int v = (*S.begin()).second;
    S.erase(S.begin());
    for (int e : G[v]) {
      int u = edge[e].first ^ v;
      int w = edge[e].second;
      if (dp_s1[u] > dp_s1[v] + w) {
        S.erase({dp_s1[u], u});
        dp_s1[u] = dp_s1[v] + w;
        S.insert({dp_s1[u], u});
      }
    }
  }
}
void dijkstra_s2() {
  set<pair<long long, int>> S;
  S.insert({0, s2});
  memset(dp_s2, 127, sizeof dp_s2);
  dp_s2[s2] = 0;
  while (!S.empty()) {
    int v = (*S.begin()).second;
    S.erase(S.begin());
    for (int e : G[v]) {
      int u = edge[e].first ^ v;
      int w = edge[e].second;
      if (dp_s2[u] > dp_s2[v] + w) {
        S.erase({dp_s2[u], u});
        dp_s2[u] = dp_s2[v] + w;
        S.insert({dp_s2[u], u});
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> m >> k >> s1 >> s2 >> f;
  s1--, s2--, f--;
  for (int e = 0; e < m; e++) {
    int u, v, w;
    cin >> u >> v >> w;
    u--, v--;
    edge[e] = {u ^ v, w};
    G[u].push_back(e);
  }
  for (int i = 0; i < k; i++) {
    int u, v, l, r;
    cin >> u >> v >> l >> r;
    spelEdge[i] = Edge{--u, --v, l, r};
    edge[m + i] = {u ^ v, r};
    G[u].push_back(m + i);
  }
  while (true) {
    dijkstra_s1();
    dijkstra_s2();
    bool fg = true;
    for (int i = 0; i < k; i++) {
      if (!mark[i]) {
        Edge e = spelEdge[i];
        if (dp_s1[e.u] < dp_s2[e.u]) {
          edge[m + i].second = e.l;
          mark[i] = true;
          fg = false;
        }
      }
    }
    if (fg) {
      break;
    }
  }
  dijkstra_s1();
  dijkstra_s2();
  if (dp_s1[f] > dp_s2[f]) {
    return cout << "LOSE\n", 0;
  }
  if (dp_s1[f] < dp_s2[f]) {
    cout << "WIN\n";
  } else {
    cout << "DRAW\n";
  }
  for (int i = 0; i < k; i++) {
    if (mark[i]) {
      cout << spelEdge[i].l << ' ';
    } else {
      cout << spelEdge[i].r << ' ';
    }
  }
}
