#include <bits/stdc++.h>
using namespace std;
bool home = 1;
signed realMain();
signed main() {
  home = 0;
  if (home) {
    freopen("input", "r", stdin);
  } else {
    ios::sync_with_stdio(0);
    cin.tie(0);
  }
  realMain();
}
const long long N = (long long)3e5 + 7;
long long n, m, k, dep[N], par[N];
vector<long long> g[N];
vector<long long> good[N];
vector<long long> bk[N];
void dfs(long long a) {
  for (auto &b : g[a]) {
    if (dep[b] == 0) {
      par[b] = a;
      good[a].push_back(b);
      dep[b] = 1 + dep[a];
      dfs(b);
    } else {
      if (dep[b] < dep[a] - 1) {
        bk[a].push_back(b);
      }
    }
  }
}
mt19937 rng((long long)(new char));
signed realMain() {
  cin >> n >> m >> k;
  for (long long i = 1; i <= m; i++) {
    long long x, y;
    cin >> x >> y;
    g[x].push_back(y);
    g[y].push_back(x);
  }
  long long root = rng() % n + 1;
  dep[root] = 1;
  dfs(root);
  long long leafs = 0;
  for (long long i = 1; i <= n; i++) {
    leafs += good[i].empty();
  }
  long long mx_dep = 0;
  for (long long i = 1; i <= n; i++) {
    mx_dep = max(mx_dep, dep[i]);
  }
  bool goodd = (mx_dep * k >= n);
  if (!goodd) {
    cout << "CYCLES\n";
    long long need = k;
    for (long long id = 1; id <= n; id++) {
      long long i = id;
      if (need == 0) break;
      if (!good[i].empty()) continue;
      if ((long long)bk[i].size() < 2) {
        cout << "sad_at_node=" << i << ":" << (long long)bk[i].size() << "\n";
        return 0;
      }
      need--;
      long long x = bk[i][0], y = bk[i][1];
      if ((dep[i] - dep[x] + 1) % 3 != 0) {
        cout << dep[i] - dep[x] + 1 << "\n";
        while (i != par[x]) {
          cout << i << " ";
          i = par[i];
        }
        cout << "\n";
        continue;
      }
      if ((dep[i] - dep[y] + 1) % 3 != 0) {
        cout << dep[i] - dep[y] + 1 << "\n";
        while (i != par[y]) {
          cout << i << " ";
          i = par[i];
        }
        cout << "\n";
        continue;
      }
      if (dep[x] < dep[y]) swap(x, y);
      if ((dep[x] - dep[y] + 2) % 3 != 0) {
        cout << dep[x] - dep[y] + 2 << "\n";
        vector<long long> uga;
        while (x != par[y]) {
          uga.push_back(x);
          x = par[x];
        }
        reverse(uga.begin(), uga.end());
        cout << i << " ";
        for (auto &j : uga) {
          cout << j << " ";
        }
        cout << "\n";
        continue;
      }
      cout << i << "sad:(\n";
      return 0;
    }
  } else {
    cout << "PATH\n";
    cout << mx_dep << "\n";
    long long i = 1;
    while (dep[i] != mx_dep) i++;
    while (i) {
      cout << i << " ";
      i = par[i];
    }
    cout << "\n";
  }
  return 0;
}
