#include <bits/stdc++.h>
using namespace std;
const int inft = 1000000009;
const int MAXN = 10444;
int n, m, k, s1, s2, f;
vector<pair<int, int> > V[MAXN];
int cost[MAXN];
int lower[MAXN];
int pocz[MAXN];
long long *dd;
struct cmp {
  inline bool operator()(const int &a, const int &b) {
    if (dd[a] != dd[b]) return dd[a] < dd[b];
    return a < b;
  }
};
set<int, cmp> S;
void dijkstra(long long *ddd, int start) {
  dd = ddd;
  for (int i = 0; i < (n); ++i) dd[i] = 1LL << 60;
  dd[start] = 0;
  for (int i = 0; i < (n); ++i) S.insert(i);
  while (!S.empty()) {
    int u = *(S.begin());
    S.erase(u);
    for (auto it = (V[u]).begin(); it != (V[u]).end(); ++it)
      if (dd[it->first] > dd[u] + cost[it->second]) {
        S.erase(it->first);
        dd[it->first] = dd[u] + cost[it->second];
        S.insert(it->first);
      }
  }
}
long long d1[MAXN], d2[MAXN];
int main() {
  scanf("%d%d%d", &n, &m, &k);
  scanf("%d%d%d", &s1, &s2, &f);
  --s1;
  --s2;
  --f;
  for (int i = 0; i < (m); ++i) {
    int a, b;
    scanf("%d%d%d", &a, &b, &cost[i]);
    --a;
    --b;
    V[a].push_back({b, i});
  }
  for (int i = m; i < m + k; ++i) {
    int a, b;
    scanf("%d%d%d%d", &a, &b, &lower[i], &cost[i]);
    --a;
    --b;
    pocz[i] = a;
    V[a].push_back({b, i});
  }
  while (1) {
    dijkstra(d1, s1);
    dijkstra(d2, s2);
    bool ktos = 0;
    for (int i = m; i < m + k; ++i)
      if (cost[i] != lower[i] && d1[pocz[i]] < d2[pocz[i]]) {
        cost[i] = lower[i];
        ktos = 1;
        break;
      }
    if (!ktos) break;
  }
  if (d1[f] < d2[f]) puts("WIN");
  if (d1[f] == d2[f]) puts("DRAW");
  if (d1[f] > d2[f]) puts("LOSE");
  if (d1[f] <= d2[f]) {
    for (int i = m; i < m + k; ++i) printf("%d ", cost[i]);
    puts("");
  }
  return 0;
}
