#include <bits/stdc++.h>
using namespace std;
template <class T, class... S>
void dbs(string str, T t, S... s) {
  int idx = str.find(',');
  cout << str.substr(0, idx) << " : " << t << ",";
  dbs(str.substr(idx + 1), s...);
}
template <class S, class T>
ostream& operator<<(ostream& os, const pair<S, T>& p) {
  return os << "(" << p.first << ", " << p.second << ")";
}
template <class T>
ostream& operator<<(ostream& os, const vector<T>& p) {
  os << "[ ";
  for (auto& it : p) os << it << " ";
  return os << "]";
}
template <class T>
ostream& operator<<(ostream& os, const set<T>& p) {
  os << "[ ";
  for (auto& it : p) os << it << " ";
  return os << "]";
}
template <class S, class T>
ostream& operator<<(ostream& os, const map<S, T>& p) {
  os << "[ ";
  for (auto& it : p) os << it << " ";
  return os << "]";
}
using namespace std;
void manage(vector<pair<int, int> >& ranges) {
  if (ranges.empty()) {
    return;
  }
  vector<pair<int, int> > ret;
  sort(ranges.begin(), ranges.end());
  int curL = ranges[0].first, curR = ranges[0].second;
  for (int i = 1; i < ranges.size(); i++) {
    pair<int, int> now = ranges[i];
    if (curR >= now.first) {
      curR = max(now.second, curR);
    } else {
      ret.push_back({curL, curR});
      curL = ranges[i].first, curR = ranges[i].second;
    }
  }
  ret.push_back({curL, curR});
  ranges = ret;
}
vector<vector<pair<int, int> > > intV, intH;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int N, M, K;
  cin >> N >> M >> K;
  set<int> huhx, huhy;
  vector<pair<int, pair<int, int> > > cutV, cutH;
  for (int i = 0; i < K; i++) {
    int x1, x2, y1, y2;
    cin >> x1 >> y1 >> x2 >> y2;
    if (x1 > x2) swap(x1, x2);
    if (y1 > y2) swap(y1, y2);
    if (x1 < x2) cutV.push_back({y1, {x1, x2}}), huhy.insert(y1);
    if (y1 < y2) cutH.push_back({x1, {y1, y2}}), huhx.insert(x1);
  }
  map<int, int> compx, compy, icx, icy;
  int cnt = 0;
  for (int i : huhx) {
    compx[i] = cnt;
    icx[cnt] = i;
    cnt++;
  }
  intH.resize(cnt);
  cnt = 0;
  for (int i : huhy) {
    compy[i] = cnt;
    icy[cnt] = i;
    cnt++;
  }
  intV.resize(cnt);
  for (auto u : cutV) {
    intV[compy[u.first]].push_back(u.second);
  }
  for (auto u : cutH) {
    intH[compx[u.first]].push_back(u.second);
  }
  for (auto& u : intV) {
    manage(u);
  }
  for (auto& u : intH) {
    manage(u);
  }
  int gr = 0;
  if ((N - huhx.size()) % 2 == 0) {
    gr ^= M;
  }
  if ((M - huhy.size()) % 2 == 0) {
    gr ^= N;
  }
  vector<int> fucx, fucy;
  for (int i = 0; i < intH.size(); i++) {
    int xc = icx[i];
    int lc = 0;
    int xx = 0;
    for (auto u : intH[i]) {
      if (lc < u.first) {
        xx += u.first - lc;
      }
      lc = u.second;
    }
    if (lc < M) {
      xx += M - lc;
    }
    fucx.push_back(xx);
    gr ^= xx;
  }
  for (int i = 0; i < intV.size(); i++) {
    int yc = icy[i];
    int lc = 0;
    int xx = 0;
    for (auto u : intV[i]) {
      if (lc < u.first) {
        xx += u.first - lc;
      }
      lc = u.second;
    }
    if (lc < N) {
      xx += N - lc;
    }
    fucy.push_back(xx);
    gr ^= xx;
  }
  int vx = -1;
  for (int i = 1; i < N; i++) {
    if (huhx.find(i) == huhx.end()) {
      vx = i;
      break;
    }
  }
  int vy = -1;
  for (int i = 1; i < M; i++) {
    if (huhy.find(i) == huhy.end()) {
      vy = i;
      break;
    }
  }
  vector<pair<int, pair<int, int> > > horz, verts;
  if (vx != -1) {
    horz.push_back({vx, {0, M}});
  }
  if (vy != -1) {
    verts.push_back({vy, {0, N}});
  }
  if (gr == 0) {
    cout << "SECOND";
  } else {
    cout << "FIRST\n";
    if (verts.size() && (N ^ gr) < N) {
      cout << 0 << ' ' << vy << ' ' << N - (N ^ gr) << ' ' << vy << endl;
      return 0;
    }
    if (horz.size() && (M ^ gr) < M) {
      cout << vx << ' ' << 0 << ' ' << vx << ' ' << M - (M ^ gr) << endl;
      return 0;
    }
    for (int i = 0; i < huhx.size(); i++) {
      if ((fucx[i] ^ gr) > fucx[i]) {
        continue;
      }
      int xx = icx[i];
      int req = fucx[i] - (fucx[i] ^ gr);
      int st = 0, del = 0;
      intH[i].push_back({M, M});
      for (int j = 0; j < intH[i].size(); j++) {
        if (st - del >= req) {
          st = del + req;
          break;
        }
        st = intH[i][j].first;
        if (j) {
          del += intH[i][j - 1].second - intH[i][j - 1].first;
        }
      }
      if (st - del >= req) {
        st = del + req;
      }
      cout << xx << ' ' << 0 << ' ' << xx << ' ' << st << endl;
      return 0;
      ;
    }
    for (int i = 0; i < huhy.size(); i++) {
      if ((fucy[i] ^ gr) > fucy[i]) {
        continue;
      }
      int xx = icy[i];
      int req = fucy[i] - (fucy[i] ^ gr);
      int st = 0, del = 0;
      intV[i].push_back({N, N});
      for (int j = 0; j < intV[i].size(); j++) {
        if (st - del >= req) {
          st = del + req;
          break;
        }
        st = intV[i][j].first;
        if (j) {
          del += intV[i][j - 1].second - intV[i][j - 1].first;
        }
      }
      if (st - del >= req) {
        st = del + req;
      }
      cout << 0 << ' ' << xx << ' ' << st << ' ' << xx << endl;
      return 0;
      ;
    }
  }
  return 0;
}
