#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
vector<int> v[250005];
vector<vector<int> > circle;
int k, target;
vector<int> stk;
int vis[300005];
int ok[300005];
int instk[300005];
void path() {
  printf("PATH\n");
  printf("%d\n", stk.size());
  for (auto it : stk) {
    printf("%d ", it);
  }
  printf("\n");
  exit(0);
}
void Circle() {
  printf("CYCLES\n");
  for (auto it : circle) {
    printf("%d\n", it.size());
    reverse(it.begin(), it.end());
    for (auto it2 : it) {
      printf("%d ", it2);
    }
    printf("\n");
  }
  exit(0);
}
void dfs(int xx, int f) {
  stk.push_back(xx);
  instk[xx] = stk.size();
  if (stk.size() >= target) {
    path();
  }
  vector<int> vv;
  for (auto it : v[xx]) {
    if (it != f) {
      if (instk[it]) {
        vv.push_back(instk[it]);
      } else {
        if (!vis[it]) {
          dfs(it, xx);
        } else
          ;
      }
    }
  }
  sort(vv.begin(), vv.end());
  if (!ok[xx] && vv.size() >= 2) {
    int first = vv[vv.size() - 2];
    int second = vv.back();
    if ((stk.size() - second + 1) % 3 != 0) {
      vector<int> mycircle;
      for (int i = second - 1; i < stk.size(); i++) {
        mycircle.push_back(stk[i]);
        ok[stk[i]] = 1;
      }
      circle.push_back(mycircle);
    } else if ((stk.size() - first + 1) % 3 != 0) {
      vector<int> mycircle;
      for (int i = first - 1; i < stk.size(); i++) {
        mycircle.push_back(stk[i]);
        ok[stk[i]] = 1;
      }
      circle.push_back(mycircle);
    } else {
      vector<int> mycircle;
      for (int i = first - 1; i < second; i++) {
        mycircle.push_back(stk[i]);
        ok[stk[i]] = 1;
      }
      mycircle.push_back(xx);
      ok[xx] = 1;
      circle.push_back(mycircle);
    }
  }
  if (circle.size() == k) {
    Circle();
  }
  stk.pop_back();
  instk[xx] = 0;
  vis[xx] = 1;
}
int main() {
  int n, m;
  scanf("%d %d %d", &n, &m, &k);
  target = (n + k - 1) / k;
  for (int i = 0; i < m; i++) {
    int first, second;
    scanf("%d %d", &first, &second);
    v[first].push_back(second);
    v[second].push_back(first);
  }
  for (int i = 1; i <= n; i++) {
    if (!vis[i]) {
      dfs(i, 0);
    }
  }
}
