#include <bits/stdc++.h>
using namespace std;
int n, m, k;
map<int, vector<pair<int, int> > > vert;
map<int, vector<pair<int, int> > > hor;
vector<pair<int, int> > vs;
vector<pair<int, int> > hs;
int getSize(vector<pair<int, int> >& x) {
  int ant = 0;
  int res = 0;
  for (int i = 0; i < ((int)x.size()); i++) {
    int a = max(x[i].first, ant);
    if (a < x[i].second) {
      res += x[i].second - a;
      ant = x[i].second;
    }
  }
  return res;
}
void cortev(int ind, int tam) {
  int x = ind;
  int yb = 0;
  int ye = 0;
  int res = 0;
  vector<pair<int, int> > vec = vert[ind];
  vec.push_back(make_pair(m, m));
  sort(vec.begin(), vec.end());
  for (int i = 0; i < ((int)vec.size()); i++) {
    int a = vec[i].first;
    if (a >= ye) {
      if (res + a - ye >= tam) {
        ye += tam - res;
        break;
      }
      res += a - ye;
    }
    ye = max(ye, vec[i].second);
  }
  printf("%d %d %d %d\n", x, yb, x, ye);
}
void corteh(int ind, int tam) {
  int y = ind;
  int xb = 0;
  int xe = 0;
  int res = 0;
  vector<pair<int, int> > vec = hor[ind];
  vec.push_back(make_pair(n, n));
  sort(vec.begin(), vec.end());
  for (int i = 0; i < ((int)vec.size()); i++) {
    int a = vec[i].first;
    if (a >= xe) {
      if (res + a - xe >= tam) {
        xe += tam - res;
        break;
      }
      res += a - xe;
    }
    xe = max(xe, vec[i].second);
  }
  printf("%d %d %d %d\n", xb, y, xe, y);
}
void findv(int tam) {
  map<int, vector<pair<int, int> > >::iterator it;
  int ant = 1;
  for (it = vert.begin(); it != vert.end(); it++) {
    if (it->first > ant) {
      printf("%d %d %d %d\n", ant, 0, ant, tam);
      return;
    } else {
      ant++;
    }
  }
  printf("%d %d %d %d\n", ant, 0, ant, tam);
}
void findh(int tam) {
  map<int, vector<pair<int, int> > >::iterator it;
  int ant = 1;
  for (it = hor.begin(); it != hor.end(); it++) {
    if (it->first > ant) {
      printf("%d %d %d %d\n", 0, ant, tam, ant);
      return;
    } else {
      ant++;
    }
  }
  printf("%d %d %d %d\n", 0, ant, tam, ant);
}
int main() {
  scanf("%d %d %d", &n, &m, &k);
  vs.clear();
  hs.clear();
  vert.clear();
  hor.clear();
  for (int i = 0; i < (k); i++) {
    int xb, yb, xe, ye;
    scanf("%d %d %d %d", &xb, &yb, &xe, &ye);
    if (xb == xe) {
      vert[xb].push_back(make_pair(min(yb, ye), max(yb, ye)));
    } else {
      hor[yb].push_back(make_pair(min(xb, xe), max(xb, xe)));
    }
  }
  int res = 0;
  if (((n - 1) - (int)vert.size()) % 2 != 0) {
    res = res ^ m;
  }
  if (((m - 1) - (int)hor.size()) % 2 != 0) {
    res = res ^ n;
  }
  map<int, vector<pair<int, int> > >::iterator it;
  vector<pair<int, int> > x;
  for (it = vert.begin(); it != vert.end(); it++) {
    x = it->second;
    sort(x.begin(), x.end());
    int y = m - getSize(x);
    vs.push_back(make_pair(y, it->first));
    res = res ^ y;
  }
  for (it = hor.begin(); it != hor.end(); it++) {
    x = it->second;
    sort(x.begin(), x.end());
    int y = n - getSize(x);
    hs.push_back(make_pair(y, it->first));
    res = res ^ y;
  }
  if (res == 0) {
    printf("SECOND\n");
  } else {
    printf("FIRST\n");
    for (int i = 0; i < ((int)vs.size()); i++) {
      int y = res ^ vs[i].first;
      if (y < vs[i].first) {
        cortev(vs[i].second, vs[i].first - y);
        return 0;
      }
    }
    for (int i = 0; i < ((int)hs.size()); i++) {
      int y = res ^ hs[i].first;
      if (y < hs[i].first) {
        corteh(hs[i].second, hs[i].first - y);
        return 0;
      }
    }
    if ((int)vs.size() < n - 1) {
      int y = res ^ m;
      if (y < m) {
        findv(m - y);
        return 0;
      }
    }
    if ((int)hs.size() < m - 1) {
      int y = res ^ n;
      if (y < n) {
        findh(n - y);
        return 0;
      }
    }
  }
  return 0;
}
