#include <bits/stdc++.h>
const int maxn = 5100;
char s[3000010], ans[3000010];
int fa[3000010];
int tree[8400000], l[maxn + 1], r[maxn + 1];
int n, K;
void init() {
  int i;
  scanf("%s", s + 1);
  scanf("%d%d", &K, &n);
  for (i = 1; i <= n; ++i) scanf("%d%d", &l[i], &r[i]);
}
void init_tree(int p, int l, int r) {
  tree[p] = r - l + 1;
  if (l < r) {
    int mid = (l + r) / 2;
    init_tree(p * 2, l, mid);
    init_tree(p * 2 + 1, mid + 1, r);
  }
}
int del(int p, int l, int r, int k) {
  --tree[p];
  if (l == r) return l;
  int mid = (l + r) / 2;
  if (k <= tree[p * 2])
    return del(p * 2, l, mid, k);
  else
    return del(p * 2 + 1, mid + 1, r, k - tree[p * 2]);
}
int zhao(int p, int l, int r, int k) {
  if (l == r) return l;
  int mid = (l + r) / 2;
  if (k <= tree[p * 2])
    return zhao(p * 2, l, mid, k);
  else
    return zhao(p * 2 + 1, mid + 1, r, k - tree[p * 2]);
}
void work() {
  int i, j, k, len, now;
  init_tree(1, 1, K);
  for (i = 1; i <= K; ++i) fa[i] = 0;
  for (i = n; i >= 1; --i) {
    len = r[i] - l[i] + 1;
    now = l[i] + 1;
    if (now > r[i]) now = l[i];
    for (j = 1; (j <= len) && (r[i] + 1 <= tree[1]); ++j) {
      k = del(1, 1, K, r[i] + 1);
      fa[k] = zhao(1, 1, K, now);
      now += 2;
      if (now > r[i]) now = l[i];
    }
  }
  now = 0;
  for (i = 1; i <= K; ++i)
    if (!fa[i])
      ans[i] = s[++now];
    else
      ans[i] = ans[fa[i]];
  ans[K + 1] = '\0';
}
void output() { printf("%s\n", ans + 1); }
int main() {
  init();
  work();
  output();
  return 0;
}
