#include <bits/stdc++.h>
using namespace std;
struct Edge {
  int v, c, nxt;
} e[20010];
int tot;
int first[10010];
void build(int u, int v, int c) {
  e[++tot] = (Edge){v, c, first[u]};
  first[u] = tot;
  return;
}
long long dis1[10010];
long long dis2[10010];
int l[110], r[110];
bool book[10010];
struct Val {
  int pos;
  long long val;
  Val() {}
  Val(int a, long long b) {
    pos = a;
    val = b;
  }
};
bool operator<(const Val& a, const Val& b) { return a.val > b.val; }
int n, m, k;
void dij(long long* dis, int S) {
  priority_queue<Val> q;
  for (int i = 1; i <= n; i++) {
    dis[i] = 1e18;
    book[i] = false;
  }
  dis[S] = 0ll;
  q.push(Val(S, 0ll));
  while (!q.empty()) {
    int u = q.top().pos;
    q.pop();
    if (book[u]) continue;
    book[u] = true;
    for (int i = first[u]; i; i = e[i].nxt)
      if (!book[e[i].v] && dis[u] + e[i].c < dis[e[i].v]) {
        dis[e[i].v] = dis[u] + e[i].c;
        q.push(Val(e[i].v, dis[e[i].v]));
      }
  }
  return;
}
int s1, s2, f;
bool work1() {
  bool flag = false;
  for (int i = 1; i <= n; i++)
    if (dis1[i] < dis2[i]) {
      for (int j = first[i]; j; j = e[j].nxt) {
        int id = j - m;
        if (id <= 0) continue;
        if (e[j].c != l[id]) {
          e[j].c = l[id];
          flag = true;
        }
      }
    }
  return flag;
}
bool work2() {
  bool flag = false;
  for (int i = 1; i <= n; i++)
    if (dis1[i] <= dis2[i]) {
      for (int j = first[i]; j; j = e[j].nxt) {
        int id = j - m;
        if (id <= 0) continue;
        if (e[j].c != l[id]) {
          e[j].c = l[id];
          flag = true;
        }
      }
    }
  return flag;
}
int main() {
  scanf("%d %d %d", &n, &m, &k);
  scanf("%d %d %d", &s1, &s2, &f);
  for (int i = 1; i <= m; i++) {
    int u, v, c;
    scanf("%d %d %d", &u, &v, &c);
    build(u, v, c);
  }
  for (int i = 1; i <= k; i++) {
    int u, v;
    scanf("%d %d %d %d", &u, &v, &l[i], &r[i]);
    build(u, v, r[i]);
  }
  do {
    dij(dis1, s1);
    dij(dis2, s2);
  } while (work1());
  if (dis1[f] < dis2[f]) {
    printf("WIN\n");
    for (int i = 1; i <= k; i++) printf("%d ", e[i + m].c);
    printf("\n");
    return 0;
  }
  do {
    dij(dis1, s1);
    dij(dis2, s2);
  } while (work2());
  if (dis1[f] <= dis2[f]) {
    printf("DRAW\n");
    for (int i = 1; i <= k; i++) printf("%d ", e[i + m].c);
    printf("\n");
    return 0;
  }
  printf("LOSE\n");
  return 0;
}
