#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("inline")
#include<bits/stdc++.h>
using namespace std;
#define MD (1000000007U)
void * wmem;
char memarr[ 96000000 ] ;
template < class T> inline void walloc1d( T ** arr, int x, void ** mem = & wmem) {
static int skip[ 16 ] = { 0 , 15 , 14 , 13 , 12 , 11 , 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 } ;
( * mem) = ( void * ) ( ( ( char * ) ( * mem) ) + skip[ ( ( unsigned long long ) ( * mem) ) & 15 ] ) ;
( * arr) = ( T* ) ( * mem) ;
( * mem) = ( ( * arr) + x) ;
}
template < class T> inline void walloc1d( T ** arr, int x1, int x2, void ** mem = & wmem) {
walloc1d( arr, x2- x1, mem) ;
( * arr) - = x1;
}
template < class S, class T> inline S chmin( S & a, T b) {
if ( a> b) {
a= b;
}
return a;
}
template < class S, class T> inline S chmax( S & a, T b) {
if ( a< b) {
a= b;
}
return a;
}
template < class T> struct Arr1d{
int n;
int mem;
T* d;
T& operator[ ] ( int a) {
return d[ a] ;
}
void sort( ) {
reset( ) ;
std:: sort ( d, d+ n) ;
}
int set_cumulative_sum;
int cumulative_sum_mem;
T* cumulative_sum;
void setSum( void ) {
int i;
set_cumulative_sum = 1 ;
if ( cumulative_sum_mem < n+ 1 ) {
delete [ ] cumulative_sum;
cumulative_sum = new T[ n+ 1 ] ;
cumulative_sum_mem = n+ 1 ;
}
cumulative_sum[ 0 ] = 0 ;
for ( i= ( 0 ) ; i< ( n) ; i++ ) {
cumulative_sum[ i+ 1 ] = cumulative_sum[ i] + d[ i] ;
}
}
T getSum( int i, int j) {
if ( set_cumulative_sum== 0 ) {
setSum( ) ;
}
return cumulative_sum[ j+ 1 ] - cumulative_sum[ i] ;
}
void reset( ) {
set_cumulative_sum = 0 ;
}
void constructor( ) {
n = mem = 0 ;
d = NULL ;
set_cumulative_sum = 0 ;
cumulative_sum_mem = 0 ;
cumulative_sum = NULL ;
}
void destructor( ) {
delete [ ] d;
d = NULL ;
mem = n = 0 ;
set_cumulative_sum = 0 ;
cumulative_sum_mem = 0 ;
delete [ ] cumulative_sum;
cumulative_sum = NULL ;
}
void constructor( int nn) {
constructor( ) ;
malloc ( nn) ;
}
void memory_expand( int nn) {
if ( mem < nn) {
delete [ ] d;
d = new T[ nn] ;
mem = nn;
}
}
void malloc ( int nn) {
reset( ) ;
memory_expand( nn) ;
n = nn;
}
void setN( int nn) {
reset( ) ;
memory_expand( nn) ;
n = nn;
}
void set( vector< T> & a) {
int i;
int nn = a.size ( ) ;
setN( nn) ;
for ( i= ( 0 ) ; i< ( nn) ; i++ ) {
d[ i] = a[ i] ;
}
}
void set( int nn, T a[ ] ) {
int i;
setN( nn) ;
for ( i= ( 0 ) ; i< ( nn) ; i++ ) {
d[ i] = a[ i] ;
}
}
void free ( ) {
destructor( ) ;
}
Arr1d( ) {
constructor( ) ;
}
Arr1d( int nn) {
constructor( nn) ;
}
~Arr1d( ) {
destructor( ) ;
}
}
;
#define main dummy_main
int main( ) {
wmem = memarr;
return 0 ;
}
#undef main
Arr1d< long long > t1;
Arr1d< long long > t2;
class Solution{
public :
int minWastedSpace( vector< int > & packages, vector< vector< int >> & boxes) {
int i;
dummy_main( ) ;
long long res = 4611686016279904256LL;
long long mx = - 1 ;
t1.malloc ( 100000 + 1 ) ;
t2.malloc ( 100000 + 1 ) ;
for ( i= ( 0 ) ; i< ( 100000 + 1 ) ; i++ ) {
t1[ i] = t2[ i] = 0 ;
}
for ( auto i : packages) {
auto cTE1_r3A = ( ( 1 ) ) ;
auto RZTsC2BF = ( ( i) ) ;
t1[ i] + = cTE1_r3A;
t2[ i] + = RZTsC2BF;
chmax( mx, i) ;
}
for ( auto v : boxes) {
int n = v.size ( ) ;
int s = - 1 ;
long long tmp = 0 ;
sort( v.begin ( ) , v.end ( ) ) ;
if ( v[ n- 1 ] < mx) {
continue ;
}
for ( i= ( 0 ) ; i< ( n) ; i++ ) {
tmp + = v[ i] * t1.getSum ( s+ 1 , v[ i] ) - t2.getSum ( s+ 1 , v[ i] ) ;
s = v[ i] ;
}
chmin( res, tmp) ;
}
if ( res == 4611686016279904256LL) {
return - 1 ;
}
return res % MD;
}
}
;
// cLay version 20210607-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// Arr1d<ll> t1, t2;
//
// class Solution {
// public:
// int minWastedSpace(vector<int>& packages, vector<vector<int>>& boxes) {
// dummy_main();
// ll res = ll_inf, mx = -1;
// t1.malloc(1d5+1);
// t2.malloc(1d5+1);
// rep(i,1d5+1) t1[i] = t2[i] = 0;
//
// for(auto i : packages){
// (t1[i], t2[i]) += (1, i);
// mx >?= i;
// }
// for(auto v : boxes){
// int n = v.size(), s = -1;
// ll tmp = 0;
// sort(v.begin(), v.end());
// if(v[n-1] < mx) continue;
// rep(i,n){
// tmp += v[i] * t1.getSum(s+1, v[i]) - t2.getSum(s+1, v[i]);
// s = v[i];
// }
// res <?= tmp;
// }
//
// if(res == ll_inf) return -1;
// return res % MD;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoInVucm9sbC1sb29wcyIpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJpbmxpbmUiKQojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIE1EICgxMDAwMDAwMDA3VSkKdm9pZCp3bWVtOwpjaGFyIG1lbWFycls5NjAwMDAwMF07CnRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSB2b2lkIHdhbGxvYzFkKFQgKiphcnIsIGludCB4LCB2b2lkICoqbWVtID0gJndtZW0pewogIHN0YXRpYyBpbnQgc2tpcFsxNl0gPSB7MCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMX07CiAgKCptZW0pID0gKHZvaWQqKSggKChjaGFyKikoKm1lbSkpICsgc2tpcFsoKHVuc2lnbmVkIGxvbmcgbG9uZykoKm1lbSkpICYgMTVdICk7CiAgKCphcnIpPShUKikoKm1lbSk7CiAgKCptZW0pPSgoKmFycikreCk7Cn0KdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIHZvaWQgd2FsbG9jMWQoVCAqKmFyciwgaW50IHgxLCBpbnQgeDIsIHZvaWQgKiptZW0gPSAmd21lbSl7CiAgd2FsbG9jMWQoYXJyLCB4Mi14MSwgbWVtKTsKICAoKmFycikgLT0geDE7Cn0KdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4gaW5saW5lIFMgY2htaW4oUyAmYSwgVCBiKXsKICBpZihhPmIpewogICAgYT1iOwogIH0KICByZXR1cm4gYTsKfQp0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBUPiBpbmxpbmUgUyBjaG1heChTICZhLCBUIGIpewogIGlmKGE8Yil7CiAgICBhPWI7CiAgfQogIHJldHVybiBhOwp9CnRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCBBcnIxZHsKICBpbnQgbjsKICBpbnQgbWVtOwogIFQqZDsKICBUJiBvcGVyYXRvcltdKGludCBhKXsKICAgIHJldHVybiBkW2FdOwogIH0KICB2b2lkIHNvcnQoKXsKICAgIHJlc2V0KCk7CiAgICBzdGQ6OnNvcnQoZCwgZCtuKTsKICB9CiAgaW50IHNldF9jdW11bGF0aXZlX3N1bTsKICBpbnQgY3VtdWxhdGl2ZV9zdW1fbWVtOwogIFQqY3VtdWxhdGl2ZV9zdW07CiAgdm9pZCBzZXRTdW0odm9pZCl7CiAgICBpbnQgaTsKICAgIHNldF9jdW11bGF0aXZlX3N1bSA9IDE7CiAgICBpZihjdW11bGF0aXZlX3N1bV9tZW0gPCBuKzEpewogICAgICBkZWxldGVbXSBjdW11bGF0aXZlX3N1bTsKICAgICAgY3VtdWxhdGl2ZV9zdW0gPSBuZXcgVFtuKzFdOwogICAgICBjdW11bGF0aXZlX3N1bV9tZW0gPSBuKzE7CiAgICB9CiAgICBjdW11bGF0aXZlX3N1bVswXSA9IDA7CiAgICBmb3IoaT0oMCk7aTwobik7aSsrKXsKICAgICAgY3VtdWxhdGl2ZV9zdW1baSsxXSA9IGN1bXVsYXRpdmVfc3VtW2ldICsgZFtpXTsKICAgIH0KICB9CiAgVCBnZXRTdW0oaW50IGksIGludCBqKXsKICAgIGlmKHNldF9jdW11bGF0aXZlX3N1bT09MCl7CiAgICAgIHNldFN1bSgpOwogICAgfQogICAgcmV0dXJuIGN1bXVsYXRpdmVfc3VtW2orMV0gLSBjdW11bGF0aXZlX3N1bVtpXTsKICB9CiAgdm9pZCByZXNldCgpewogICAgc2V0X2N1bXVsYXRpdmVfc3VtID0gMDsKICB9CiAgdm9pZCBjb25zdHJ1Y3RvcigpewogICAgbiA9IG1lbSA9IDA7CiAgICBkID0gTlVMTDsKICAgIHNldF9jdW11bGF0aXZlX3N1bSA9IDA7CiAgICBjdW11bGF0aXZlX3N1bV9tZW0gPSAwOwogICAgY3VtdWxhdGl2ZV9zdW0gPSBOVUxMOwogIH0KICB2b2lkIGRlc3RydWN0b3IoKXsKICAgIGRlbGV0ZVtdIGQ7CiAgICBkID0gTlVMTDsKICAgIG1lbSA9IG4gPSAwOwogICAgc2V0X2N1bXVsYXRpdmVfc3VtID0gMDsKICAgIGN1bXVsYXRpdmVfc3VtX21lbSA9IDA7CiAgICBkZWxldGVbXSBjdW11bGF0aXZlX3N1bTsKICAgIGN1bXVsYXRpdmVfc3VtID0gTlVMTDsKICB9CiAgdm9pZCBjb25zdHJ1Y3RvcihpbnQgbm4pewogICAgY29uc3RydWN0b3IoKTsKICAgIG1hbGxvYyhubik7CiAgfQogIHZvaWQgbWVtb3J5X2V4cGFuZChpbnQgbm4pewogICAgaWYobWVtIDwgbm4pewogICAgICBkZWxldGVbXSBkOwogICAgICBkID0gbmV3IFRbbm5dOwogICAgICBtZW0gPSBubjsKICAgIH0KICB9CiAgdm9pZCBtYWxsb2MoaW50IG5uKXsKICAgIHJlc2V0KCk7CiAgICBtZW1vcnlfZXhwYW5kKG5uKTsKICAgIG4gPSBubjsKICB9CiAgdm9pZCBzZXROKGludCBubil7CiAgICByZXNldCgpOwogICAgbWVtb3J5X2V4cGFuZChubik7CiAgICBuID0gbm47CiAgfQogIHZvaWQgc2V0KHZlY3RvcjxUPiAmYSl7CiAgICBpbnQgaTsKICAgIGludCBubiA9IGEuc2l6ZSgpOwogICAgc2V0Tihubik7CiAgICBmb3IoaT0oMCk7aTwobm4pO2krKyl7CiAgICAgIGRbaV0gPSBhW2ldOwogICAgfQogIH0KICB2b2lkIHNldChpbnQgbm4sIFQgYVtdKXsKICAgIGludCBpOwogICAgc2V0Tihubik7CiAgICBmb3IoaT0oMCk7aTwobm4pO2krKyl7CiAgICAgIGRbaV0gPSBhW2ldOwogICAgfQogIH0KICB2b2lkIGZyZWUoKXsKICAgIGRlc3RydWN0b3IoKTsKICB9CiAgQXJyMWQoKXsKICAgIGNvbnN0cnVjdG9yKCk7CiAgfQogIEFycjFkKGludCBubil7CiAgICBjb25zdHJ1Y3Rvcihubik7CiAgfQogIH5BcnIxZCgpewogICAgZGVzdHJ1Y3RvcigpOwogIH0KfQo7CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgd21lbSA9IG1lbWFycjsKICByZXR1cm4gMDsKfQojdW5kZWYgbWFpbgpBcnIxZDxsb25nIGxvbmc+IHQxOwpBcnIxZDxsb25nIGxvbmc+IHQyOwpjbGFzcyBTb2x1dGlvbnsKICBwdWJsaWM6CiAgaW50IG1pbldhc3RlZFNwYWNlKHZlY3RvcjxpbnQ+JiBwYWNrYWdlcywgdmVjdG9yPHZlY3RvcjxpbnQ+PiYgYm94ZXMpewogICAgaW50IGk7CiAgICBkdW1teV9tYWluKCk7CiAgICBsb25nIGxvbmcgcmVzID0gNDYxMTY4NjAxNjI3OTkwNDI1NkxMOwogICAgbG9uZyBsb25nIG14ID0gLTE7CiAgICB0MS5tYWxsb2MoMTAwMDAwKzEpOwogICAgdDIubWFsbG9jKDEwMDAwMCsxKTsKICAgIGZvcihpPSgwKTtpPCgxMDAwMDArMSk7aSsrKXsKICAgICAgdDFbaV0gPSB0MltpXSA9IDA7CiAgICB9CiAgICBmb3IoYXV0byBpIDogcGFja2FnZXMpewogICAgICBhdXRvIGNURTFfcjNBID0gKCgxKSk7CiAgICAgIGF1dG8gUlpUc0MyQkYgPSAoKCBpKSk7CiAgICAgIHQxW2ldKz1jVEUxX3IzQTsKICAgICAgdDJbaV0rPVJaVHNDMkJGOwogICAgICBjaG1heChteCwgaSk7CiAgICB9CiAgICBmb3IoYXV0byB2IDogYm94ZXMpewogICAgICBpbnQgbiA9IHYuc2l6ZSgpOwogICAgICBpbnQgcyA9IC0xOwogICAgICBsb25nIGxvbmcgdG1wID0gMDsKICAgICAgc29ydCh2LmJlZ2luKCksIHYuZW5kKCkpOwogICAgICBpZih2W24tMV0gPCBteCl7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgZm9yKGk9KDApO2k8KG4pO2krKyl7CiAgICAgICAgdG1wICs9IHZbaV0gKiB0MS5nZXRTdW0ocysxLCB2W2ldKSAtIHQyLmdldFN1bShzKzEsIHZbaV0pOwogICAgICAgIHMgPSB2W2ldOwogICAgICB9CiAgICAgIGNobWluKHJlcywgdG1wKTsKICAgIH0KICAgIGlmKHJlcyA9PSA0NjExNjg2MDE2Mjc5OTA0MjU2TEwpewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICByZXR1cm4gcmVzICUgTUQ7CiAgfQp9CjsKLy8gY0xheSB2ZXJzaW9uIDIwMjEwNjA3LTEKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyAjZGVmaW5lIG1haW4gZHVtbXlfbWFpbgovLyB7fQovLyAjdW5kZWYgbWFpbgovLyAKLy8gQXJyMWQ8bGw+IHQxLCB0MjsKLy8gCi8vIGNsYXNzIFNvbHV0aW9uIHsKLy8gcHVibGljOgovLyAgIGludCBtaW5XYXN0ZWRTcGFjZSh2ZWN0b3I8aW50PiYgcGFja2FnZXMsIHZlY3Rvcjx2ZWN0b3I8aW50Pj4mIGJveGVzKSB7Ci8vICAgICBkdW1teV9tYWluKCk7Ci8vICAgICBsbCByZXMgPSBsbF9pbmYsIG14ID0gLTE7Ci8vICAgICB0MS5tYWxsb2MoMWQ1KzEpOwovLyAgICAgdDIubWFsbG9jKDFkNSsxKTsKLy8gICAgIHJlcChpLDFkNSsxKSB0MVtpXSA9IHQyW2ldID0gMDsKLy8gCi8vICAgICBmb3IoYXV0byBpIDogcGFja2FnZXMpewovLyAgICAgICAodDFbaV0sIHQyW2ldKSArPSAoMSwgaSk7Ci8vICAgICAgIG14ID4/PSBpOwovLyAgICAgfQovLyAgICAgZm9yKGF1dG8gdiA6IGJveGVzKXsKLy8gICAgICAgaW50IG4gPSB2LnNpemUoKSwgcyA9IC0xOwovLyAgICAgICBsbCB0bXAgPSAwOwovLyAgICAgICBzb3J0KHYuYmVnaW4oKSwgdi5lbmQoKSk7Ci8vICAgICAgIGlmKHZbbi0xXSA8IG14KSBjb250aW51ZTsKLy8gICAgICAgcmVwKGksbil7Ci8vICAgICAgICAgdG1wICs9IHZbaV0gKiB0MS5nZXRTdW0ocysxLCB2W2ldKSAtIHQyLmdldFN1bShzKzEsIHZbaV0pOwovLyAgICAgICAgIHMgPSB2W2ldOwovLyAgICAgICB9Ci8vICAgICAgIHJlcyA8Pz0gdG1wOwovLyAgICAgfQovLyAKLy8gICAgIGlmKHJlcyA9PSBsbF9pbmYpIHJldHVybiAtMTsKLy8gICAgIHJldHVybiByZXMgJSBNRDsKLy8gICB9Ci8vIH07Cg==