n, m, k = [int(x) for x in input().split()]
emotes = sorted([int(x) for x in input().split()], reverse=True)
if k + 1 <= m:
m, r = divmod(m, k + 1)
print(m * (k * emotes[0] + emotes[1]) + r * emotes[0])
else:
print(k * emotes[0])
//Athour : 7amok4a
//Return Dark ^_^ &_&
#include <bits/stdc++.h>
using namespace std;
#ifndef ONLINE_JUDGE
#include "debug.h"
#else
#define debug(...)
#endif
#define YU ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(0);
//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//
void A7med_YU(){
long long n , m , k ; cin >> n >> m >> k ;
vector < long long > v ( n ) ;
for ( auto &i : v ) cin >> i;
sort ( v.begin() , v.end() ) ;
if ( v[n-1] == v[n-2] ) return void ( cout << m * v[n-1] );
long long out = ( m / ( k+1 ) ) * ( k * v[n-1] + v[n-2]) + ( ( m % ( k+1) ) * v[n-1] ) ;
cout << out << '\n';
}
int32_t main(void) {
YU;
#ifndef ONLINE_JUDGE
Matter();
#endif
int t = 1; //cin >> t;
while (t--) {
A7med_YU();
}
#ifndef ONLINE_JUDGE
end_clock();
#endif
}
797. All Paths From Source to Target | 1547B - Alphabetical Strings |
1550A - Find The Array | 118B - Present from Lena |
27A - Next Test | 785. Is Graph Bipartite |
90. Subsets II | 1560A - Dislike of Threes |
36. Valid Sudoku | 557. Reverse Words in a String III |
566. Reshape the Matrix | 167. Two Sum II - Input array is sorted |
387. First Unique Character in a String | 383. Ransom Note |
242. Valid Anagram | 141. Linked List Cycle |
21. Merge Two Sorted Lists | 203. Remove Linked List Elements |
733. Flood Fill | 206. Reverse Linked List |
83. Remove Duplicates from Sorted List | 116. Populating Next Right Pointers in Each Node |
145. Binary Tree Postorder Traversal | 94. Binary Tree Inorder Traversal |
101. Symmetric Tree | 77. Combinations |
46. Permutations | 226. Invert Binary Tree |
112. Path Sum | 1556A - A Variety of Operations |