#include <bits/stdc++.h>
using namespace std;
struct node {
  long long x, y;
};
struct aaa {
  long long x, y, l, r;
} a[100010];
long long n, m, k, tot, e[100010], hd[100010], nt[100010], v[100010],
    val[100010], d1[100010], d2[100010];
priority_queue<node> q;
void build(long long x, long long y, long long w) {
  tot++;
  e[tot] = y;
  val[tot] = w;
  nt[tot] = hd[x];
  hd[x] = tot;
}
bool operator<(node a, node b) { return a.y > b.y; }
void dj(long long S, long long dis[]) {
  long long i, v;
  for (i = 1; i <= n; i++) dis[i] = 1e18;
  dis[S] = 0;
  q.push(node{S, 0});
  while (!q.empty()) {
    node hh = q.top();
    q.pop();
    if (dis[hh.x] < hh.y) continue;
    for (i = hd[hh.x]; i; i = nt[i]) {
      v = e[i];
      if (hh.y + val[i] < dis[v]) {
        dis[v] = hh.y + val[i];
        q.push(node{v, dis[v]});
      }
    }
  }
}
int main() {
  long long i, j, x, y, w, flag, s1, s2, t;
  scanf("%lld%lld%lld", &n, &m, &k);
  scanf("%lld%lld%lld", &s1, &s2, &t);
  for (i = 1; i <= m; i++) {
    scanf("%lld%lld%lld", &x, &y, &w);
    build(x, y, w);
  }
  for (i = 1; i <= k; i++) {
    scanf("%lld%lld%lld%lld", &a[i].x, &a[i].y, &a[i].l, &a[i].r);
    build(a[i].x, a[i].y, a[i].r);
  }
  while (1) {
    flag = 0;
    dj(s1, d1);
    dj(s2, d2);
    for (i = 1; i <= k; i++)
      if (d1[a[i].x] <= d2[a[i].x] && !v[i]) {
        v[i] = 1;
        flag = 1;
        val[m + i] = a[i].l;
      }
    if (!flag) break;
  }
  if (d1[t] > d2[t]) return puts("LOSE"), 0;
  if (d1[t] == d2[t])
    puts("DRAW");
  else
    puts("WIN");
  for (i = 1; i <= k; i++) printf("%lld ", val[m + i]);
}
