#include <bits/stdc++.h>
#pragma GCC optimize("O2,unroll-loops")
using namespace std;
const int inf = 1000000010;
const long long INF = 10000000000000010LL;
const int mod = 1000000007;
const int MAXN = 300010, LOG = 20;
int n, m, k, u, v, x, y, t, a, b, ans;
int par[MAXN], h[MAXN], leaf[MAXN];
vector<int> G[MAXN];
void dfs(int node) {
  h[node] = h[par[node]] + 1;
  leaf[node] = 1;
  for (int v : G[node])
    if (!h[v]) {
      par[v] = node;
      dfs(v);
      leaf[node] = 0;
    }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> k;
  while (m--) {
    cin >> u >> v;
    G[u].push_back(v);
    G[v].push_back(u);
  }
  dfs(1);
  for (int v = 1; v <= n; v++)
    if (h[v] * k >= n) {
      cout << "PATH " << h[v] << "\n";
      while (v) {
        cout << v << ' ';
        v = par[v];
      }
      return 0;
    }
  cout << "CYCLES\n";
  for (int v = 2; v <= n && k; v++)
    if (leaf[v]) {
      k--;
      int done = 0, x = 0, y = 0;
      for (int u : G[v])
        if (u != par[v]) {
          if ((h[v] - h[u] + 1) % 3) {
            cout << h[v] - h[u] + 1 << "\n";
            x = v;
            while (1) {
              cout << x << ' ';
              if (x == u) break;
              x = par[x];
            }
            cout << "\n";
            done = 1;
            break;
          }
          if (x)
            y = u;
          else
            x = u;
        }
      if (done) continue;
      assert(x && y);
      cerr << "{"
           << "x"
           << ", "
           << "y"
           << "} = {" << (x) << ", " << (y) << "}" << endl;
      if (h[x] < h[y]) swap(x, y);
      cout << h[x] - h[y] + 2 << "\n";
      while (1) {
        cout << x << ' ';
        if (x == y) break;
        x = par[x];
      }
      cout << v << "\n";
    }
  return 0;
}
