#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f, mod = 1e9 + 7;
const int maxn = 3e5 + 100;
const long double PI = acos(-1.0);
long long gcd(long long a, long long b) { return (a ? gcd(b % a, a) : b); }
long long power(long long a, long long n) {
  long long p = 1;
  while (n > 0) {
    if (n % 2) {
      p = p * a;
    }
    n >>= 1;
    a *= a;
  }
  return p;
}
long long power(long long a, long long n, long long mod) {
  long long p = 1;
  while (n > 0) {
    if (n % 2) {
      p = p * a;
      p %= mod;
    }
    n >>= 1;
    a *= a;
    a %= mod;
  }
  return p % mod;
}
int n, m, k;
int flag[maxn];
set<int> gg;
set<int>::iterator it;
vector<int> nex[maxn];
set<int> one, aa, bb;
int main() {
  while (~scanf("%d%d%d", &n, &m, &k)) {
    one.clear();
    gg.clear();
    aa.clear();
    bb.clear();
    for (int i = 1; i <= n; i++) nex[i].clear();
    for (int i = 1; i <= m; i++) {
      int u, v;
      scanf("%d%d", &u, &v);
      if (u == 1)
        one.insert(v);
      else if (v == 1)
        one.insert(u);
      else {
        nex[u].push_back(v);
        nex[v].push_back(u);
      }
    }
    memset(flag, 0, sizeof(flag));
    for (int i = 2; i <= n; i++) gg.insert(i);
    int ans = 1, flv = 0;
    for (int i = 0; i < nex[2].size(); i++) {
      flag[nex[2][i]] = 1;
      gg.erase(nex[2][i]);
      aa.insert(nex[2][i]);
    }
    gg.erase(2);
    do {
      if (aa.size() == 0) break;
      flv = 0;
      while (!gg.empty()) {
        it = gg.begin();
        int d = *it;
        flv = 0;
        bb.clear();
        for (int i = 0; i < nex[d].size(); i++)
          if (flag[nex[d][i]] == ans) {
            aa.erase(nex[d][i]);
            bb.insert(nex[d][i]);
          }
        for (it = aa.begin(); it != aa.end(); it++) {
          gg.insert(*it);
          flag[*it] = ans - 1;
        }
        if (bb.size() == 0) {
          flv = 1;
          break;
        }
        aa.clear();
        for (it = bb.begin(); it != bb.end(); it++) aa.insert(*it);
        gg.erase(d);
      }
      if (flv == 1) break;
      it = aa.begin();
      int d = *it;
      flv = 0;
      gg.clear();
      for (it = aa.begin(); it != aa.end(); it++) gg.insert(*it);
      aa.clear();
      for (int i = 0; i < nex[d].size(); i++)
        if (flag[nex[d][i]] == ans) {
          gg.erase(nex[d][i]);
          flag[nex[d][i]] = ans + 1;
          aa.insert(nex[d][i]);
        }
      gg.erase(d);
      ans++;
    } while (1);
    gg.clear();
    for (int i = 2; i <= n; i++)
      if (one.count(i) == 0) gg.insert(flag[i]);
    int s = gg.size();
    if (s != ans || ans > k || k + one.size() >= n)
      cout << "impossible" << endl;
    else
      cout << "possible" << endl;
  }
  return 0;
}
