#include <bits/stdc++.h>
using namespace std;
using Graph = vector<vector<int>>;
using ll = long long;
vector<int> par, dep, vis, lea;
void dfs(Graph& g, int v) {
  vis[v] = true;
  for (auto nei : g[v]) {
    if (!vis[nei]) {
      lea[v] = 0;
      dep[nei] = dep[v] + 1;
      par[nei] = v;
      dfs(g, nei);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.precision(10);
  int n, m, k;
  cin >> n >> m >> k;
  Graph g(n);
  for (int i = 0; i < (m); ++i) {
    int a, b;
    cin >> a >> b;
    --a, --b;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  par.resize(n, -1);
  dep.resize(n, 0);
  vis.resize(n, 0);
  lea.resize(n, 1);
  dfs(g, 0);
  if (*max_element((dep).begin(), (dep).end()) + 1 >= (n + k - 1) / k) {
    cout << "PATH" << endl;
    int v = max_element((dep).begin(), (dep).end()) - begin(dep);
    cout << dep[v] + 1 << endl;
    while (v != -1) {
      cout << v + 1 << ' ';
      v = par[v];
    }
    cout << endl;
    return 0;
  }
  cout << "CYCLES" << endl;
  int left = k;
  for (int i = 0; i < n && left; i++) {
    if (!lea[i]) continue;
    left--;
    auto p1 = g[i][0];
    if (p1 == par[i]) p1 = g[i][2];
    auto p2 = g[i][1];
    if (p2 == par[i]) p2 = g[i][2];
    if (dep[p1] > dep[p2]) swap(p1, p2);
    bool done = false;
    for (auto p : {p1, p2}) {
      if (!done && (dep[i] - dep[p] + 1) % 3) {
        done = true;
        cout << dep[i] - dep[p] + 1 << endl;
        cout << i + 1 << ' ';
        for (int v = i; v != p; v = par[v]) cout << par[v] + 1 << ' ';
        cout << endl;
      }
    }
    if (!done) {
      cout << 1 + dep[p2] - dep[p1] + 1 << endl;
      cout << i + 1 << ' ' << p2 + 1 << ' ';
      for (int v = p2; v != p1; v = par[v]) cout << par[v] + 1 << ' ';
      cout << endl;
    }
  }
  return 0;
}
