Nura wants to buy k gadgets. She has only sburles for that. She can buy each gadget for dollars or for pounds. So each gadget is selling only for some type of currency. The type of currency and the cost in that currency are not changing.

Nura can buy gadgets for n days. For each day you know the exchange rates of dollar and pound, so you know the cost of conversion burles to dollars or to pounds.

Each day (from 1 to n) Nura can buy some gadgets by current exchange rate. Each day she can buy any gadgets she wants, but each gadget can be bought no more than once during n days.

Help Nura to find the minimum day index when she will have k gadgets. Nura always pays with burles, which are converted according to the exchange rate of the purchase day. Nura can't buy dollars or pounds, she always stores only burles. Gadgets are numbered with integers from 1 to m in order of their appearing in input.

Input

First line contains four integers n, m, k, s (1 ≤ n ≤ 2·105, 1 ≤ k ≤ m ≤ 2·105, 1 ≤ s ≤ 109) — number of days, total number and required number of gadgets, number of burles Nura has.

Second line contains n integers ai (1 ≤ ai ≤ 106) — the cost of one dollar in burles on i-th day.

Third line contains n integers bi (1 ≤ bi ≤ 106) — the cost of one pound in burles on i-th day.

Each of the next m lines contains two integersti, ci (1 ≤ ti ≤ 2, 1 ≤ ci ≤ 106) — type of the gadget and it's cost. For the gadgets of the first type cost is specified in dollars. For the gadgets of the second type cost is specified in pounds.

Output

If Nura can't buy k gadgets print the only line with the number -1.

Otherwise the first line should contain integer d— the minimum day index, when Nura will have kgadgets. On each of the next k lines print two integers qi, di — the number of gadget and the day gadget should be bought. All values qi should be different, but the values di can coincide (so Nura can buy several gadgets at one day). The days are numbered from 1 to n.

In case there are multiple possible solutions, print any of them.

Example

Input
5 4 2 2
1 2 3 2 1
3 2 1 2 3
1 1
2 1
1 2
2 2
Output
3
1 1
2 3
Input
4 3 2 200
69 70 71 72
104 105 106 107
1 1
2 2
1 2
Output
-1
Input
4 3 1 1000000000
900000 910000 940000 990000
990000 999000 999900 999990
1 87654
2 76543
1 65432
Output
-1

有m种商品,可以购买,每种商品只能用美元或英镑二者其一购买

你现在有s元,既不是美元,也不是英镑,需要兑换才能购买

你需要买k种商品

你可以在n天里进行购买,每天的汇率不同,汇率告诉你

问你花费最少多少天,可以完成购买任务。


由于本人太菜这题是我写过的最难的二分 (靠题解才能存活的菜鸡)
(这题没有long long WA到吐)
对天数进行二分,am[maxn]这个对应着在1~maxn中兑换英镑的最小值ida[maxn],最小值对应的天数
am[maxn]这个对应着在1~maxn中兑换美元的最小值idb[maxn] 最小值对应的天数

求出每件物品的最小花费排序选出前k个就行了

这题需要理清思路 仔细思考
 #include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
#define maxn 200010
int a[maxn],b[maxn],c[maxn],t[maxn];
int am[maxn],bm[maxn],ida[maxn],idb[maxn],id[maxn];
int n,m,k,s;
struct node
{
long long cost;
int idx;
}qu[maxn];
int cmp(node a,node b)
{
return a.cost<b.cost;
}
long long check(int x)
{
long long ans=;
for (int i= ;i<=m ;i++ ){
if (t[i]==) qu[i].cost=(long long)c[i]*(long long)am[x];
else qu[i].cost=(long long)c[i]*(long long)bm[x];
qu[i].idx=i;
}
sort(qu+,qu++m,cmp);
for (int i= ;i<=k ;i++)
ans+=qu[i].cost;
return ans;
}
int main() {
while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF){
am[]=bm[]=;
for (int i= ;i<=n ;i++){
scanf("%d",&a[i]);
if (a[i]<am[i-]) {
am[i]=a[i];
ida[i]=i;
}else {
am[i]=am[i-];
ida[i]=ida[i-];
}
}
for (int i= ; i<=n ; i++) {
scanf("%d",&b[i]);
if (b[i]<bm[i-]) {
bm[i]=b[i];
idb[i]=i;
} else {
bm[i]=bm[i-];
idb[i]=idb[i-];
}
}
for (int i= ;i<=m ;i++)
scanf("%d%d",&t[i],&c[i]);
long long r=n,l=,mid,d=-;
while(l<=r) {
mid=(l+r)/;
if (check(mid)<=s) {
r=mid-;
d=mid;
for (int i= ;i<=k ;i++){
id[i]=qu[i].idx;
}
}else l=mid+;
}
printf("%lld\n",d);
if(d==-) continue;
int x=d;
for (int i= ;i<=k ;i++){
printf("%d %d\n",id[i],t[id[i]]==?ida[x]:idb[x]);
}
}
return ;
}

Gadgets for dollars and pounds CodeForces - 609D的更多相关文章

  1. codeforces 609D D. Gadgets for dollars and pounds(二分+贪心)

    题目链接: D. Gadgets for dollars and pounds time limit per test 2 seconds memory limit per test 256 mega ...

  2. Codeforces Educational Codeforces Round 3 D. Gadgets for dollars and pounds 二分,贪心

    D. Gadgets for dollars and pounds 题目连接: http://www.codeforces.com/contest/609/problem/C Description ...

  3. CF# Educational Codeforces Round 3 D. Gadgets for dollars and pounds

    D. Gadgets for dollars and pounds time limit per test 2 seconds memory limit per test 256 megabytes ...

  4. Educational Codeforces Round 3 D. Gadgets for dollars and pounds 二分+前缀

    D. Gadgets for dollars and pounds time limit per test 2 seconds memory limit per test 256 megabytes ...

  5. CodeForces 609D Gadgets for dollars and pounds

    二分天数+验证 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm&g ...

  6. CodeForce---Educational Codeforces Round 3 D. Gadgets for dollars and pounds 正题

    对于这题笔者无解,只有手抄一份正解过来了: 基本思想就是 : 二分答案,对于第x天,计算它最少的花费f(x),<=s就是可行的,这是一个单调的函数,所以可以二分. 对于f(x)的计算,我用了nl ...

  7. Codeforces 609D 被二分教做人

    传送门:http://codeforces.com/problemset/problem/609/D (如需转载,请注明出处,谢谢O(∩_∩)O) 题意: Nura想买k个小玩意,她手上有 s 个bu ...

  8. Educational Codeforces Round 3

    A. USB Flash Drives 水题,排序即可 ]; int main() { int n,m; scanf("%d%d",&n,&m); ;i<n; ...

  9. 【249】◀▶IEW-Unit14

    Unit 14 Money and Finance 线图写作技巧 1.Model1对应图片分析 The graph contains information about the price in US ...

随机推荐

  1. Tomcat时区设置方法[转]

    最近被问到了关于Tomcat时区设置方法,还没碰到类似的问题,网上说是记录日志和定时任务时可能会出现,目前还未发现,先记录下来. 原文地址:http://blog.csdn.net/x_yp/arti ...

  2. D 洛谷 P3602 Koishi Loves Segments [贪心 树状数组+堆]

    题目描述 Koishi喜欢线段. 她的条线段都能表示成数轴上的某个闭区间.Koishi喜欢在把所有线段都放在数轴上,然后数出某些点被多少线段覆盖了. Flandre看她和线段玩得很起开心,就抛给她一个 ...

  3. OpenVPN的那些坑

    遇到的情形 最近遇到一种情况,当需要同时使用到多个VPN连接时,默认的openVPN连接是不支持的,但是可以通过手动配置虚拟网络适配器进行相关的设置. 具体解决方法 基本思路是:在本地的网络连接中添加 ...

  4. Trie树 字典树-学习笔记

    字符串--蒟蒻永远的阴影 对于字符串匹配 KMP很好的解决了以一个文本串匹配一个模板串的问题 但如果模板串有多个呢 这是KMP不再适用 我们引入一个新的数据结构--字典树 (当然又有像AC自动机这样更 ...

  5. 日程管理 FullCalendar

    日程管理,采用著名组件FullCalendar日历插件实现FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发1.实现按 ...

  6. 有了Openvswitch和Docker,终于可以做《TCP/IP详解》的实验了!

    所有做过网络编程的程序员,想必都会看<TCP/IP详解>卷一:协议 后来出了第二版,但是由于第一版才是Rechard Stevens的原版,本人还是多次看了第一版. 对这一版印象最深的就是 ...

  7. 通过Yii来理解MVC

    模型:是表现业务数据.规则和逻辑的对象. 可以通过集成yii\base\Model或者它的子类定义模型类. 基类yii\base\Model支持许多实用的特性: A 属性:表现业务数据,可以像普通类属 ...

  8. MysqL主从复制_模式之GTID复制

    基于GTID的复制是从Mysql5.6开始支持的一种新的复制方式,此方式与传统基于日志的方式存在很大的差异,在原来的基于日志的复制中,从服务器连接到主服务器并告诉主服务器要从哪个二进制日志的偏移量开始 ...

  9. css的一些复习

    css,全称Cascading Style Sheets,层叠样式表. css选择器是从右往左解析的,解析速度会比较快. 选择器 选择器权重 !important 优先级最高 元素属性 优先级高 相同 ...

  10. uva208

    一道简单的路径打印,首先需要一次dfs判断能否从1到达目标点,否则可能会超时.还有一点就是那个格式需要注意下,每条路径前没有空格(看起来好像有3个空格)-. AC代码: #include<cst ...