#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1677721600")
using namespace std;
string to_string(string const& s) { return '"' + s + '"'; }
string to_string(char c) { return string(1, c); }
string to_string(const char* s) { return to_string((string)s); }
string to_string(bool b) { return (b ? "true" : "false"); }
string to_string(vector<bool> v) {
  string s = "[";
  for (int qwe = 0; qwe < v.size(); qwe++) {
    s += to_string(v[qwe]) + ",";
  }
  s += "]";
  return s;
}
template <class T1, class T2>
string to_string(pair<T1, T2> p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}
template <class T>
string to_string(T c) {
  string s = "[";
  for (auto vvv : c) {
    s += to_string(vvv) + ",";
  }
  s += "]";
  return s;
}
void debug_impl() { cerr << endl; };
template <typename T1, typename... T2>
void debug_impl(T1 a, T2... b) {
  cerr << " " << to_string(a);
  debug_impl(b...);
}
vector<vector<int>> grav;
vector<int> d;
vector<bool> was;
vector<bool> leaf;
vector<int> par;
void dfs(int u, int p) {
  par[u] = p;
  d[u] = (p == -1) ? 1 : d[p] + 1;
  was[u] = true;
  for (int v : grav[u]) {
    if (v != p && !was[v]) {
      dfs(v, u);
      leaf[u] = false;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  int n, m, k;
  cin >> n >> m >> k;
  grav.resize(n);
  d.resize(n);
  was.resize(n);
  leaf.resize(n, true);
  par.resize(n);
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    u--;
    v--;
    grav[u].push_back(v);
    grav[v].push_back(u);
  }
  dfs(0, -1);
  int l = 0;
  for (int i = 0; i < n; i++) {
    if (d[i] >= (n + k - 1) / k) {
      vector<int> path;
      while (i != 0) {
        path.push_back(i);
        for (int j : grav[i]) {
          if (d[j] == d[i] - 1) {
            i = j;
            break;
          }
        }
      }
      path.push_back(i);
      reverse(path.begin(), path.end());
      cout << "PATH" << endl;
      cout << path.size() << endl;
      for (int x : path) cout << x + 1 << " ";
      cout << endl;
      return 0;
    }
  }
  int c = 0;
  for (int i = 0; i < n; i++)
    ;
  ;
  printf("CYCLES\n");
  vector<int> cycle;
  for (int i = 0; i < n; i++) {
    if (leaf[i]) {
      cycle.clear();
      for (int j : grav[i]) {
        if ((d[i] - d[j]) % 3 != 2 && d[i] - d[j] != 1) {
          int x = i;
          while (x != j) {
            cycle.push_back(x);
            x = par[x];
          }
          cycle.push_back(x);
          break;
        }
      }
      if (cycle.empty()) {
        int u = -1, v = -1;
        for (int j : grav[i]) {
          if ((d[i] - d[j]) % 3 == 2) {
            if (u == -1) {
              u = j;
            } else if (v == -1) {
              v = j;
              break;
            }
          }
        }
        if (d[u] < d[v]) swap(u, v);
        while (u != v) {
          cycle.push_back(u);
          u = par[u];
        }
        cycle.push_back(u);
        cycle.push_back(i);
      }
      printf("%d\n", cycle.size());
      for (int x : cycle) printf("%d ", x + 1);
      printf("\n");
      c++;
      if (c == k) return 0;
    }
  }
  return 0;
}
