#include <bits/stdc++.h>
using namespace std;
typedef set<int, bool (*)(int, int)> sic;
typedef set<long long int, bool (*)(long long int, long long int)> slc;
struct node;
node* tree[500000];
struct node {
  node* p;
  int id, l, h, d;
  list<node*> ch;
  node* anc[40];
  bool isl = 1;
  node(int id) {
    this->l = this->h = this->d = 0;
    this->p = this;
    this->id = id;
  }
};
void hang(node* t) {
  t->anc[0] = t->p;
  t->l = t->p != t ? t->p->l + 1 : 0;
  for (int i = 1; i < 40; i++)
    t->anc[i] = t->anc[i - 1] != NULL ? t->anc[i - 1]->anc[i - 1] : NULL;
  if (t->ch.empty()) return;
  int gd1 = 0, gd2 = 0;
  for (node* c : t->ch)
    if (c->p == c && c->id != 1) {
      t->isl = 0;
      c->ch.remove(t);
      c->p = t;
      hang(c);
      t->d = max(t->d, c->d);
      if (c->h + 1 > gd1)
        gd2 = gd1, gd1 = c->h + 1;
      else if (c->h + 1 > gd2)
        gd2 = c->h + 1;
    }
  t->h = gd1;
  t->d = max(t->d, gd1 + gd2);
}
node* lca(node* u, node* v) {
  if (u->l < v->l) return lca(v, u);
  int d = u->l - v->l;
  while (d > 0) {
    int lg = (int)log2(d);
    u = u->anc[lg];
    d -= 1 << lg;
  }
  if (u == v) return u;
  for (int j = 40 - 1; j >= 0; j--)
    if (u->anc[j] != NULL && u->anc[j] != v->anc[j])
      u = u->anc[j], v = v->anc[j];
  return u->p;
}
string out;
long long int T;
set<int> adj[500000];
int A[500000];
int u, v;
int N, M;
int K;
void process() {
  cin >> N >> M >> K;
  {
    for (int i = 1; i <= N; i++) tree[i] = new node(i);
    for (int i = 1; i <= M; i++)
      cin >> u >> v, tree[u]->ch.push_back(tree[v]),
          tree[v]->ch.push_back(tree[u]);
  }
  hang(tree[1]);
  for (int i = (int)(1); i <= (int)(N); i++)
    if (tree[i]->l + 1 >= (N + K - 1) / K) {
      auto t = tree[i];
      out += "PATH\n", out += to_string(t->l + 1), out += "\n",
          out += to_string(t->id) + " ";
      while (t != tree[1]) t = t->p, out += to_string(t->id) + " ";
      out[out.length() - 1] = '\n';
      return;
    }
  out += "CYCLES\n";
  int nc = 0;
  for (int i = (int)(1); i <= (int)(N); i++)
    if (tree[i]->isl) {
      node *t = tree[i], *u = t->ch.back(), *v = t->ch.front(), *w;
      if (u->l < v->l) w = u, u = v, v = w;
      if ((t->l - v->l + 1) % 3) {
        out += to_string(t->l - v->l + 1), out += "\n";
        if (1 > 1) out += to_string(t->id) + " ";
        out += to_string(t->id) + " ";
        while (t != v) t = t->p, out += to_string(t->id) + " ";
        out[out.length() - 1] = '\n', nc++;
      } else if ((t->l - u->l + 1) % 3) {
        out += to_string(t->l - u->l + 1), out += "\n";
        if (1 > 1) out += to_string(t->id) + " ";
        out += to_string(t->id) + " ";
        while (t != u) t = t->p, out += to_string(t->id) + " ";
        out[out.length() - 1] = '\n', nc++;
      } else if ((u->l - v->l + 2) % 3) {
        out += to_string(u->l - v->l + 2), out += "\n";
        if (2 > 1) out += to_string(t->id) + " ";
        out += to_string(u->id) + " ";
        while (u != v) u = u->p, out += to_string(u->id) + " ";
        out[out.length() - 1] = '\n', nc++;
      }
      if (nc >= K) return;
    }
  out = "-1\n";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  T = 1;
  for (int t = (int)(1); t <= (int)(T); t++) process();
  cout << out;
  return 0;
}
