#include <bits/stdc++.h>
using namespace std;
inline long long max(long long a, long long b) { return a > b ? a : b; }
inline long long min(long long a, long long b) { return a < b ? a : b; }
void scan(long long &x) {
  bool neg = false;
  register long long c;
  x = 0;
  c = getchar();
  if (c == '-') {
    neg = true;
    c = getchar();
  }
  for (; (c > 47 && c < 58); c = getchar()) x = (x << 1) + (x << 3) + c - 48;
  if (neg) x *= -1;
}
long long depth[250009];
bool vis[250009];
long long id, mx;
vector<long long> adj[250009];
long long parent[250009];
void dfs(long long u) {
  vis[u] = true;
  if (depth[u] > mx) {
    mx = depth[u];
    id = u;
  }
  for (auto v : adj[u]) {
    if (vis[v]) continue;
    parent[v] = u;
    depth[v] = depth[u] + 1;
    dfs(v);
  }
}
long long n, m, k;
vector<vector<long long>> res;
bool leaf[250009];
void work(long long u) {
  vis[u] = true;
  if (!leaf[u]) {
    long long x = -1, y = -1;
    if (res.size() >= k) return;
    for (auto v : adj[u]) {
      if (v == parent[u]) continue;
      if (x == -1)
        x = v;
      else if (y == -1)
        y = v;
      else
        break;
    }
    if (depth[x] > depth[y]) swap(x, y);
    vector<long long> tmp;
    long long it = -1, top = -1;
    if ((depth[u] - depth[y] + 1) % 3 && (depth[u] - depth[y] + 1) > 3) {
      it = u;
      top = parent[y];
    } else if ((depth[u] - depth[x] + 1) % 3 && (depth[u] - depth[x] + 1) > 3) {
      it = u;
      top = parent[x];
    } else if ((depth[y] - depth[x] + 2) % 3 && (depth[y] - depth[x] + 2) > 3) {
      tmp.push_back(u);
      it = y;
      top = parent[x];
    }
    if (it != -1) {
      while (it != top) tmp.push_back(it), it = parent[it];
      res.push_back(tmp);
    }
  } else {
    for (auto v : adj[u]) {
      if (vis[v]) continue;
      work(v);
    }
  }
}
int32_t main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  long long t = 1;
  while (t--) {
    long long u, v;
    cin >> n >> m >> k;
    for (long long i = 0; i < m; i++) {
      cin >> u >> v;
      adj[u].push_back(v);
      adj[v].push_back(u);
    }
    depth[1] = 1;
    parent[1] = 0;
    dfs(1);
    long long lim = n / k;
    if (mx > n / k) {
      cout << "PATH" << endl;
      vector<long long> ss;
      ss.push_back(id);
      while (id != 1) {
        id = parent[id];
        ss.push_back(id);
      }
      cout << ss.size() << endl;
      for (long long i = 0; i < ss.size(); i++) {
        cout << ss[i] << " ";
      }
    } else {
      cout << "CYCLES" << endl;
      for (long long i = 0; i <= n; i++) {
        leaf[parent[i]] = true;
      }
      memset(vis, false, sizeof(vis));
      work(1);
      for (auto tp : res) {
        cout << tp.size() << endl;
        for (auto v : tp) {
          cout << v << " ";
        }
        cout << endl;
      }
    }
    cout << endl;
  }
  return 0;
}
