#include <bits/stdc++.h>
using namespace std;
const long long LL_INF = (long long)2e18 + 5;
template <typename T1, typename T2>
bool minimize(T1 &a, const T2 &b) {
  if (b < a) {
    a = b;
    return true;
  }
  return false;
}
struct offer {
  int x, y;
  bool operator<(const offer &other) const { return x < other.x; }
};
int N, M, K;
vector<int> shovels;
vector<long long> shovel_sum;
vector<offer> offers;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> N >> M >> K;
  shovels.resize(N);
  for (auto &s : shovels) cin >> s;
  sort(shovels.begin(), shovels.end());
  shovel_sum.assign(N + 1, 0);
  for (int i = 0; i < N; i++) shovel_sum[i + 1] = shovel_sum[i] + shovels[i];
  offers.resize(M);
  for (auto &offer : offers) {
    cin >> offer.x >> offer.y;
    offer.y = offer.x - offer.y;
  }
  sort(offers.begin(), offers.end());
  vector<long long> dp(K + 1, LL_INF);
  dp[0] = 0;
  for (int k = 1; k <= K; k++) {
    for (auto &offer : offers) {
      if (offer.x > k) break;
      minimize(dp[k],
               dp[k - offer.x] + shovel_sum[k] - shovel_sum[k - offer.y]);
    }
    minimize(dp[k], dp[k - 1] + shovels[k - 1]);
  }
  cout << dp[K] << '\n';
}
