#include <bits/stdc++.h>
using namespace std;
int n, m, k;
map<int, int> mpX, _mpX, mpY, _mpY;
vector<pair<int, int> > lineX[100010], lineY[100010];
int a = 0, b = 0;
int getLeft(vector<pair<int, int> > vec, int n) {
  int ed = 0;
  for (int i = 0; i < vec.size(); i++)
    if (vec[i].second > ed) {
      n -= (vec[i].second - max(vec[i].first, ed));
      ed = vec[i].second;
    }
  return n;
}
int getOR() {
  int ans = 0;
  if ((n - 1 - a) % 2 != 0) ans ^= m;
  if ((m - 1 - b) % 2 != 0) ans ^= n;
  for (int i = 1; i <= a; i++) ans ^= getLeft(lineX[i], m);
  for (int i = 1; i <= b; i++) ans ^= getLeft(lineY[i], n);
  return ans;
}
int maxBit(int u) {
  int ans = 0, ccount = 0;
  while (u) {
    if (u & 1) ans = ccount;
    ccount++;
    u = (u >> 1);
  }
  return ans;
}
int getCut(int OR, int n) { return n - (OR ^ n); }
bool cmp(pair<int, int> A, pair<int, int> B) {
  if (A.first == B.first) return A.second < B.second;
  return A.first < B.first;
}
int getLocation(vector<pair<int, int> > vec, int n) {
  int ed = 0, ccount = 0;
  for (int i = 0; i < vec.size(); i++)
    if (vec[i].second > ed) {
      if (vec[i].first > ed) {
        if (ccount + vec[i].first - ed >= n)
          return ed + n - ccount;
        else
          ccount += vec[i].first - ed, ed = vec[i].second;
      } else {
        ed = vec[i].second;
      }
    }
  return ed + n - ccount;
}
int main() {
  while (scanf("%d %d %d", &n, &m, &k) != EOF) {
    mpX.clear(), _mpX.clear(), mpY.clear(), _mpY.clear();
    while (k--) {
      int x1, y1, x2, y2;
      scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
      if (x1 == x2) {
        if (x1 == 0 || x1 == n) continue;
        if (mpX.find(x1) == mpX.end()) {
          mpX[x1] = ++a;
          _mpX[a] = x1;
        }
        lineX[mpX[x1]].push_back(make_pair(min(y1, y2), max(y1, y2)));
      } else {
        if (y1 == 0 || y1 == m) continue;
        if (mpY.find(y1) == mpY.end()) {
          mpY[y1] = ++b;
          _mpY[b] = y1;
        }
        lineY[mpY[y1]].push_back(make_pair(min(x1, x2), max(x1, x2)));
      }
    }
    for (int i = 1; i <= a; i++) sort(lineX[i].begin(), lineX[i].end(), cmp);
    for (int i = 1; i <= b; i++) sort(lineY[i].begin(), lineY[i].end(), cmp);
    int OR = getOR();
    if (OR == 0)
      printf("SECOND\n");
    else {
      printf("FIRST\n");
      int k = maxBit(OR), cut, u = 1;
      if ((n - 1 > a) && (m & (1 << k))) {
        cut = getCut(OR, m);
        for (int i = 1;; i++) {
          if (mpX.find(i) == mpX.end()) {
            u = i;
            break;
          }
        }
        printf("%d %d %d %d\n", u, 0, u, cut);
      } else if ((m - 1) > b && (n & (1 << k))) {
        cut = getCut(OR, n);
        for (int i = 1;; i++) {
          if (mpY.find(i) == mpY.end()) {
            u = i;
            break;
          }
        }
        printf("%d %d %d %d", 0, u, cut, u);
      } else {
        for (int i = 1; i <= a; i++)
          if (getLeft(lineX[i], m) & (1 << k)) {
            cut = getCut(OR, getLeft(lineX[i], m));
            printf("%d %d %d %d\n", _mpX[i], 0, _mpX[i],
                   getLocation(lineX[i], cut));
            goto ed;
          }
        for (int i = 1; i <= b; i++)
          if (getLeft(lineY[i], n) & (1 << k)) {
            cut = getCut(OR, getLeft(lineY[i], n));
            printf("%d %d %d %d\n", 0, _mpY[i], getLocation(lineY[i], cut),
                   _mpY[i]);
            goto ed;
          }
      }
    ed:;
    }
  }
  return 0;
}
