#include <bits/stdc++.h>
using namespace std;
const int N = (int)1e4 + 10;
struct Edge {
  int from, to, l, r, nxt;
} e[N << 2];
int head[N], cnt = 0;
int n, m, k, s1, s2, f, book[N];
long long d1[N], d2[N];
void add(int u, int v, int l, int r) {
  e[++cnt] = (Edge){u, v, l, r, head[u]};
  head[u] = cnt;
}
void spfa1(int s) {
  memset(d1, 38, sizeof(d1));
  memset(book, 0, sizeof(book));
  book[s] = 1;
  d1[s] = 0;
  queue<int> q;
  while (!q.empty()) q.pop();
  q.push(s);
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    book[x] = 0;
    for (int i = head[x]; i; i = e[i].nxt) {
      int v = e[i].to;
      if (d1[v] > d1[x] + e[i].r) {
        d1[v] = d1[x] + e[i].r;
        if (!book[v]) book[v] = 1, q.push(v);
      }
    }
  }
}
void spfa2(int s) {
  memset(d2, 38, sizeof(d2));
  memset(book, 0, sizeof(book));
  book[s] = 1;
  d2[s] = 0;
  queue<int> q;
  while (!q.empty()) q.pop();
  q.push(s);
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    book[x] = 0;
    for (int i = head[x]; i; i = e[i].nxt) {
      int v = e[i].to;
      if (d2[v] > d2[x] + e[i].r) {
        d2[v] = d2[x] + e[i].r;
        if (!book[v]) book[v] = 1, q.push(v);
      }
    }
  }
}
bool check(int fff) {
  int fl = 1;
  while (fl) {
    fl = 0;
    spfa1(s1), spfa2(s2);
    for (int i = m + 1; i <= m + k; i++)
      if (d1[e[i].from] < d2[e[i].from] && (e[i].l != e[i].r))
        e[i].r = e[i].l, fl = 1;
    if (d1[f] < d2[f] + fff) {
      puts(fff ? "DRAW" : "WIN");
      for (int i = m + 1; i <= m + k; i++) cout << e[i].r << " ";
      return 1;
    }
  }
  return 0;
}
int main() {
  cin >> n >> m >> k;
  cin >> s1 >> s2 >> f;
  for (int i = 1; i <= m; i++) {
    int u, v, w;
    scanf("%d%d%d", &u, &v, &w);
    add(u, v, w, w);
  }
  for (int i = 1; i <= k; i++) {
    int u, v, l1, l2;
    scanf("%d%d%d%d", &u, &v, &l1, &l2);
    add(u, v, l1, l2);
  }
  if (!check(0) && !check(1)) puts("LOSE");
}
