#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 5;
vector<int> G[maxn];
vector<int> leaves;
int dep[maxn];
int fa[maxn];
void dfs(int u) {
  bool leaf = true;
  for (auto v : G[u]) {
    if (dep[v] == 0) {
      leaf = false;
      fa[v] = u;
      dep[v] = dep[u] + 1;
      dfs(v);
    }
  }
  if (leaf) leaves.push_back(u);
}
void print(int s, int t) {
  while (s != t) {
    cout << s << " ";
    s = fa[s];
  }
  cout << s << endl;
}
int main() {
  std::ios::sync_with_stdio(false);
  int n, m, k;
  cin >> n >> m >> k;
  int x, y;
  for (int i = 1; i <= m; ++i) {
    cin >> x >> y;
    G[x].push_back(y);
    G[y].push_back(x);
  }
  dep[1] = 1;
  dfs(1);
  for (int i = 1; i <= n; ++i) {
    if (dep[i] >= ceil(n * 1.0 / k)) {
      cout << "PATH" << endl;
      cout << dep[i] << endl;
      print(i, 1);
      return 0;
    }
  }
  cout << "CYCLES" << endl;
  for (auto u : leaves) {
    bool flag = false;
    vector<int> ancestor;
    for (auto v : G[u]) {
      if (v != fa[u]) {
        if ((dep[u] - dep[v] + 1) % 3 != 0) {
          cout << dep[u] - dep[v] + 1 << endl;
          print(u, v);
          flag = true;
          break;
        } else {
          ancestor.push_back(v);
        }
      }
    }
    if (!flag) {
      if (dep[ancestor[0]] > dep[ancestor[1]]) {
        swap(ancestor[0], ancestor[1]);
      }
      cout << dep[ancestor[1]] - dep[ancestor[0]] + 2 << endl;
      cout << u << " ";
      print(ancestor[1], ancestor[0]);
    }
    k--;
    if (k == 0) break;
  }
  return 0;
}
