#include <bits/stdc++.h>
using namespace std;
using cat = long long;
void DFS(int R, vector<vector<int> >& G, vector<int>& dep, vector<int>& par) {
  for (auto it = G[R].begin(); it != G[R].end(); it++)
    if (par[*it] == -1) {
      dep[*it] = dep[R] + 1;
      par[*it] = R;
      DFS(*it, G, dep, par);
    }
}
int main() {
  cin.sync_with_stdio(0);
  cin.tie(0);
  cout << fixed << setprecision(10);
  int N, M, K;
  cin >> N >> M >> K;
  vector<vector<int> > G(N);
  for (int i = 0; i < M; i++) {
    int u, v;
    cin >> u >> v;
    G[--u].push_back(--v);
    G[v].push_back(u);
  }
  vector<int> dep(N, 0);
  vector<int> par(N, -1);
  par[0] = 0;
  DFS(0, G, dep, par);
  vector<vector<int> > dep_sort(N);
  for (int i = 0; i < N; i++) dep_sort[dep[i]].push_back(i);
  vector<int> in_cyc_mindep(N, N + 1);
  vector<vector<int> > ans_cyc;
  for (int i = N - 1; i >= 0; i--)
    for (auto it = dep_sort[i].begin(); it != dep_sort[i].end(); it++) {
      int v = *it;
      if (in_cyc_mindep[v] < dep[v])
        in_cyc_mindep[par[v]] = min(in_cyc_mindep[par[v]], in_cyc_mindep[v]);
      if (in_cyc_mindep[v] <= dep[v]) continue;
      vector<int> new_cyc(1, v);
      vector<int> back_cand;
      for (auto jt = G[v].begin(); jt != G[v].end(); jt++)
        if (dep[*jt] < dep[v] && *jt != par[v]) back_cand.push_back(*jt);
      for (auto jt = back_cand.begin(); jt != back_cand.end(); jt++)
        if ((dep[v] - dep[*jt] + 1) % 3 != 0) {
          int w = v;
          while (w != *jt) {
            w = par[w];
            new_cyc.push_back(w);
          }
          in_cyc_mindep[v] = dep[*jt];
          in_cyc_mindep[par[v]] = min(in_cyc_mindep[par[v]], in_cyc_mindep[v]);
          break;
        }
      if ((int)new_cyc.size() == 1) {
        if ((int)back_cand.size() <= 1) continue;
        int u1 = back_cand[0], u2 = back_cand[1];
        if (dep[u1] > dep[u2]) swap(u1, u2);
        int w = u2;
        new_cyc.push_back(w);
        while (w != u1) {
          w = par[w];
          new_cyc.push_back(w);
        }
      }
      if ((cat)new_cyc.size() * K >= N) {
        cout << "PATH\n" << new_cyc.size() << "\n";
        for (int j = 0; j < (int)new_cyc.size(); j++)
          cout << new_cyc[j] + 1
               << ((j + 1 == (int)new_cyc.size()) ? "\n" : " ");
        return 0;
      }
      ans_cyc.push_back(new_cyc);
      if ((int)ans_cyc.size() == K) {
        cout << "CYCLES\n";
        for (int i = 0; i < K; i++) {
          cout << ans_cyc[i].size() << "\n";
          for (int j = 0; j < (int)ans_cyc[i].size(); j++)
            cout << ans_cyc[i][j] + 1
                 << ((j + 1 == (int)ans_cyc[i].size()) ? "\n" : " ");
        }
        return 0;
      }
    }
}
